2 个回答

应该是不能,EXPOSE 不是做这个用的

如果确实需要获取这个端口值,就再把这个端口值设置到 ENV 中吧

首先,你对 expose 理解有误。

EXPOSE

The EXPOSE instruction does not actually publish the port. It functions as a type of documentation between the person who builds the image and the person who runs the container, about which ports are intended to be published.

EXPOSE 并不真正暴露端口,而是起到一个文档的作用,告诉用户你打算用哪个端口。如果用户自己配置了别的端口,比如 nginx 配置里 listen 了 81,那你写 EXPOSE 就是没啥用的。

真正暴露端口,需要在 docker run 命令行里用 -p 指定,或docker-composeports下指定。

假设你的服务也是一个 web 服务,你可以接受环境变量SVC_PORT作为监听的端口,使用你镜像的人就可以用docker run -e SVC_PORT=5000 -p 80:5000 your_image:latest 来把本机的 80 转发到容器的 5000 上。反过来说你也可以不接受端口配置,你给一个默认监听的端口号,用户自己去-p绑定到宿主机的端口上就行。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题