docker-compose:网络与链接之间的区别

我正在学习docker。我看到这两个词使我感到困惑。例如,这是一个docker-compose,它定义了两个服务redisweb-app

services:

redis:

container_name: redis

image: redis:latest

ports:

- "6379:6379"

networks:

- lognet

app:

container_name: web-app

build:

context: .

dockerfile: Dockerfile

ports:

- "3000:3000"

volumes:

- ".:/webapp"

links:

- redis

networks:

- lognet

networks:

lognet:

driver: bridge

docker-

compose文件定义了一个名为lognet的桥接网络,所有服务都将连接到该网络。据我了解,此操作使那些服务可以看到其他服务。那么在上述情况下,为什么应用程序服务仍需要链接到Redis服务。

谢谢

回答:

链接已被网络取代。Docker将它们描述为您应避免使用的旧功能。您可以安全地删除链接,并且两个容器将能够通过它们的服务名称(或container_name)相互引用。

使用compose时,链接确实会产生隐式依赖关系。您应该将其替换为更明确的depends_on部分,以使应用程序不会在未启动redis或启动redis之前尝试运行。

顺便说一句,除非您确定这是主机上唯一使用该名称的容器,并且您需要从docker

cli中按名称引用它,否则我不喜欢硬编码container_name。如果没有容器名称,则docker-

compose会给它一个不太直观的名称,但也会为它提供网络上redis的别名,这正是容器到容器联网所需要的。因此,这些建议的最终结果是:

version: '2'

# do not forget the version line, this file syntax is invalid without it

services:

redis:

image: redis:latest

ports:

- "6379:6379"

networks:

- lognet

app:

container_name: web-app

build:

context: .

dockerfile: Dockerfile

ports:

- "3000:3000"

volumes:

- ".:/webapp"

depends_on:

- redis

networks:

- lognet

networks:

lognet:

driver: bridge

以上是 docker-compose:网络与链接之间的区别 的全部内容, 来源链接: utcz.com/qa/420077.html

回到顶部