Add a way to expose a port without publishing
authorNeil Lalonde <neillalonde@gmail.com>
Thu, 7 Mar 2019 19:49:24 +0000 (14:49 -0500)
committerNeil Lalonde <neillalonde@gmail.com>
Thu, 7 Mar 2019 19:49:26 +0000 (14:49 -0500)
Use the existing "expose" section of container yaml files, which has always been publishing ports.
Expose a port if a single port number is specified (`80`).
Publish if a port mapping is specified (`"80:80"`, `"127.0.0.1:20080:80"`).

README.md
launcher

index 4fd4a636f5be8f7e34bf979b317c7438afb60bfe..9afa70d579a5eb904333e9ffdcef0a99dfe9c602 100644 (file)
--- a/README.md
+++ b/README.md
@@ -82,7 +82,7 @@ expose:
   - "127.0.0.1:20080:80"
 ```
 
-Expose port 22 inside the container on port 2222 on ALL local host interfaces. In order to bind to only one interface, you may specify the host's IP address as `([<host_interface>:[host_port]])|(<host_port>):<container_port>[/udp]` as defined in the [docker port binding documentation](http://docs.docker.com/userguide/dockerlinks/)
+Publish port 22 inside the container on port 2222 on ALL local host interfaces. In order to bind to only one interface, you may specify the host's IP address as `([<host_interface>:[host_port]])|(<host_port>):<container_port>[/udp]` as defined in the [docker port binding documentation](http://docs.docker.com/userguide/dockerlinks/). To expose a port without publishing it, specify only the port number (e.g., `80`).
 
 
 #### volumes:
index 19fbf4593f239f5ddbf8ef34f19ec3a987c1415a..ec208264a052a22438b133f8ef714c9abcdb0949 100755 (executable)
--- a/launcher
+++ b/launcher
@@ -425,7 +425,7 @@ RUBY
         p e
        end
     end
-    puts ports.map {|p| "-p\n#{p}"}.join("\n")
+    puts ports.map { |p| p.to_s.include?(':') ? "-p\n#{p}" : "--expose\n#{p}" }.join("\n")
 RUBY
 
     tmp_input_file=$(mktemp)