如何在networking中公开?

以下示例来自docker-compose 文档 。

根据我的理解,他们希望在web容器中提供redis port 6379。

他们为什么不拥有

 expose: - "6379" 

redis容器中?

 version: '2' services: web: build: . ports: - "5000:5000" volumes: - .:/code networks: - front-tier - back-tier redis: image: redis volumes: - redis-data:/var/lib/redis networks: - back-tier 

从官方的Redis映像 :

此图像包括EXPOSE 6379(redis端口),因此标准容器链接将使链接容器自动可用(如以下示例所示)。

这是非常典型的做事方式。

Redis Dockerfile 。

现在,我们不再需要链接,而是将容器分配给dockernetworking。 如果没有链接,除非您使用docker run -P发布所有端口,否则暴露容器上的端口没有任何价值。 如果集装箱位于同一个networking上(假定ICC为默认设置),则集装箱可以与在任何其他集装箱上打开的任何端口进行通信,因此暴露端口成为禁用。

通常情况下,您只能通过Dockerfile将端口暴露给运行映像的端口,或者使用-P标志。 也有一些项目,看着其他容器的暴露端口,知道如何与他们交谈,特别是我想到的nginx代理,但这是一个独特的例子。

但是, 发布一个端口使得该端口可以从docker主机获得,这总是需要通过docker-compose.yml或run命令来完成(您不希望映像作者能够在没有某种forms的本地pipe理员的情况下影响docker主机确认)。 当你发布一个特定的端口时,它不需要先暴露。