Bash命令返回一个空闲端口

时间:2017-02-27 09:40:32

标签: bash docker

作为构建管道的一部分,我想用自由端口启动容器。

寻找这样的事情:

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

2 个答案:

答案 0 :(得分:8)

您可以使用端口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

答案 1 :(得分:2)

如果您没有分配主机端口,则docker会自动选择一个随机端口来发布容器端口。

例如;

$ 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"}]}