0
作爲一個構建管道的一部分,我想用自由端口啓動容器。Bash命令返回一個空閒端口
尋找這樣的事情:
docker run --name frontend -p $(gimme-a-free-port):80 frontend:latest
作爲一個構建管道的一部分,我想用自由端口啓動容器。Bash命令返回一個空閒端口
尋找這樣的事情:
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
在第二個例子中,我只是指定的集裝箱港口,Host接口將被自動分配。
驗證:
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 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"}]}
我會刪除第二種方法。它不能可靠地工作,因爲另一個進程可能在您檢查之後但在docker可以選擇之前選擇了該端口。這是一個古典競賽條件。 – hek2mgl
是的,這是真的,但你可以檢查整個命令退出代碼,並重新運行失敗。 –
當然,但我從中看不到任何好處。 – hek2mgl