Docker编写是没有EXPOSE端口,最好镜像运行中的容器需要起个服务可以映射端口到宿主机么?


场景:web容器,编写Docker时只EXPOSE了80,容器已经运行一段时间了,开发那边需要再开8080测试
问题:
1. Dockerfile中没有EXPOSE的端口,Docker run时使用-p映射是否有效?已确认,新启动的容器使用-p参数可以绑定端口,--volume可以mount路径,在Dockerfile中指定 EXPOSE,VOLUME非必需
2. Dockerfile中没有EXPOSE的端口,不重开容器的话是否可以新增端口?
已邀请:

tuxknight

赞同来自:


嗯,实际中控制container与host之间端口映射的是docker run的-p 参数,Dockerfile中是否声明了EXPOSE影响的是-P这个参数。
所以,
1、没有声明EXPOSE端口的情况下使用-p是有效的。但是要注意VOLUME和EXPOSE不同,一旦Dockerfile中有VOLUME, 在docker run的时候,,docker 始终会将host中的目录挂载到VOLUME声明的目录并会将VOLUME声明之前的内容复制到挂载上的目录。
那么
<pre>
FROM ubuntu:latest
RUN echo "While building " >> /opt/file
VOLUME /opt
RUN rm /opt/file
</pre>
像这样的Dockerfile 会发生什么呢?

2、Dockerfile中不管有没有EXPOSE端口,需要新增端口映射只能restart container

要回复问题请先登录注册