为什么Docker在使用-P但是与-p 80:80一起使用时不能正确显示我的端口?

我的Dockerfile包含这个:

EXPOSE 80 

但是,如果我用-P运行映像,我无法连接到它。 运行-p 80:80工作正常。

 danny@linux:~$ sudo docker run -d -P dart-test b3277a5483531f6dc23a1c807cf895103fd5333b603c1b4a352e07c9721f1a48 # Can't connect here danny@linux:~$ curl http://localhost/ curl: (7) Failed to connect to localhost port 80: Connection refused danny@linux:~$ sudo docker stop b3277 b3277 danny@linux:~$ sudo docker run -d -p 80:80 dart-test dfe68699bfb33ce33e8e6e1953ac828b9d31209988df64e2627d9228758438ba # Connects fine here danny@linux:~$ curl http://localhost/ Hello, world! danny@linux:~$ 

当您使用-P ,docker会将裸露端口绑定到docker主机上从49153到65535范围内的随机高端口。 要确定实际的端口,你需要运行

 docker port <CONTAINER> 80 

当您使用-p 80:80 ,您特别将暴露的端口绑定到主机的端口80。