Bash命令返回一个空闲端口

作为构buildpipe道的一部分,我希望启动带有自由端口的容器。

寻找这样的东西:

docker run --name frontend -p $(gimme-a-free-port):80 frontend:latest 

您可以使用端口0.应用程序将0传递给内核,内核将未使用的端口分配给应用程序。

 docker run --name frontend -p 0:80 frontend:latest 

要么:

 docker run --name frontend -p 80 frontend:latest 

在第二个例子中,我只是指定了容器端口,主机端口将被自动分配。

核实:

 docker port <containerid or container name> 80/tcp -> 0.0.0.0:32768 

要仅获得随机端口值:

 docker inspect -f '{{ (index (index .NetworkSettings.Ports "80/tcp") 0).HostPort }}' <containerid or container name> 32768 

如果你不分配主机端口,docker会自动select一个随机的端口来发布容器端口。

例如;

 $ docker run --name frontend -p 80 -dit busybox 4439bdce51eee473b1e961664839a410754157bf69da2d2545ab51528a42111c $ docker port 4439bdce51eee473b1e961664839a410754157bf69da2d2545ab51528a42111c 80/tcp -> 0.0.0.0:32768 (or); $ docker inspect -f '{{json .NetworkSettings.Ports}}' 4439bdce51eee473b1e961664839a410754157bf69da2d2545ab51528a42111c {"80/tcp":[{"HostIp":"0.0.0.0","HostPort":"32768"}]}