在运行容器时,将dockerfile中的端口与映射端口进行EXPOSE有什么区别?

我知道我可以在dockerfile中EXPOSE一个端口(例如8888)。 有了这个dockerfile我可以build立一个图像,然后运行docker run --name container1 -p 8888:8888 image 。 通过这种方法,我可以访问容器中的端口8888。

第二种方法,我没有从dockerfile EXPOSE任何端口。 有了这个dockerfile我可以构buildimage2,然后运行docker docker run --name container2 -p 8888:8888 image2

我想问他们之间有什么区别?

我发现一些奇怪的东西

container1我运行jupyter notebook --port 8888 。 我可以从运行容器( localhost:8888 )的主机和同一本地networking中的计算机( hostip:8888 )访问port 8888

container2我运行jupyter notebook --port 8888 。 我可以从运行容器( localhost:8888 )的主机访问port 8888 ,但是我无法通过hostip:8888从同一本地networking中的计算机访问port 8888