docker-compose 中的端口和暴露有什么区别?

新手上路,请多包涵

--- 中的 portsexpose 选项有什么 docker-compose.yml

原文由 Bibek Shrestha 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 886
1 个回答

根据 docker-compose 参考

端口 定义为:

暴露 端口。要么指定两个端口 (HOST:CONTAINER),要么只指定容器端口(将选择随机主机端口)。

  • docker-compose.yml 中提到的端口将在 docker-compose 启动的不同服务之间共享。
  • 端口将暴露给主机的随机端口或给定端口。

我的 docker-compose.yml 看起来像:

 mysql:
  image: mysql:5.7
  ports:
    - "3306"

如果我这样做 docker-compose ps ,它将看起来像:

   Name                     Command               State            Ports
-------------------------------------------------------------------------------------
  mysql_1       docker-entrypoint.sh mysqld      Up      0.0.0.0:32769->3306/tcp

暴露 定义为:

公开端口而不将它们发布到主机 - 它们只能被链接服务访问。只能指定内部端口。

端口不暴露给主机,只暴露给其他服务。

 mysql:
  image: mysql:5.7
  expose:
    - "3306"

如果我这样做 docker-compose ps ,它将如下所示:

   Name                  Command             State    Ports
---------------------------------------------------------------
 mysql_1      docker-entrypoint.sh mysqld   Up      3306/tcp

编辑

在最新版本的 Dockerfile 中, EXPOSE 不再对操作产生任何影响,它只是提供信息。 ( 另见

原文由 Bibek Shrestha 发布,翻译遵循 CC BY-SA 4.0 许可协议

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