docker-compose ports vs揭露有什么区别?

在docker-compose.yml文件中,有portsexpose选项。 他们有什么不同?

根据docker撰写的参考资料 ,

端口被定义为:

公开港口 。 既可以指定两个端口(HOST:CONTAINER),也可以指定容器端口(将select一个随机的主机端口)。

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

docker-compose.yml看起来像

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

如果我做docker-compose up ,它会看起来像:

 $ docker-compose ps 10:27:28 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 up ,它会看起来像:

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