Mel*_*991 4 networking docker boot2docker
花了太长时间试图访问从boot2docker实例中的docker容器运行的节点服务器后,我意识到问题归结为公开和docker run -p之间的区别.
在我的Dockerfile中,我有EXPOSE 3001,我无法通过我的主机访问它.
运行"docker run -p 3001:3001 myappinst myapp"后,我能够访问该端口.
到目前为止,我认为"docker run -p 3001:3001"与dockerfile中的EXPOSE 3001基本相同.
然而,我注意到,当运行docker ps时
我得到以下"EXPOSE":
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
16341e2b9968 housemation-crawler:latest "npm start" 2 minutes ago Up 2 minutes 3001/tcp housemation-crawler-inst
(注:3001/tcp)
与下面的对比 docker run -p 3001:3001
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0b14f736033c housemation-crawler:latest "npm start" 8 seconds ago Up 2 seconds 0.0.0.0:3001->3001/tcp housemation-crawler-inst
(0.0.0.0:3001->3001/tcp)
看起来后者正在做某种端口转发,而前者只是打开端口?那是对的吗?
如果我想访问一个未转发的暴露端口,我该怎么办呢?另外,如果我想在dockerfile中进行端口转发,那么正确的语法是什么?
关于如何EXPOSE进入Dockerfile和-p选择docker run权的假设是正确的.正如您可以在Docker上阅读的在线文档:
EXPOSE <port> [<port>...]EXPOSE指令通知Docker容器将在运行时侦听指定的网络端口.Docker使用此信息使用链接互连容器(请参阅Docker用户指南),并确定在使用-P标志时向主机公开的端口.注意:EXPOSE未定义可以向主机公开哪些端口,或者默认情况下可以从主机访问端口.要在运行时向主机公开端口,请使用-p标志或-P标志.
所以EXPOSE如果你运行带有-P标志的容器,Dockerfile中的指令将指示Docker哪些端口必须映射到主机; 但是映射的本地端口不是确定性的,并且在运行时由Docker选择.除此之外,Docker将使用端口EXPOSE将信息导出为链接容器中的环境变量.
如果要设置映射的本地端口,则必须使用该-p选项docker run.
| 归档时间: |
|
| 查看次数: |
3625 次 |
| 最近记录: |