如何在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主机确认)。 当你发布一个特定的端口时,它不需要先暴露。