docker 是否使用服务名称或容器名称来解析 docker compose 中的服务引用?

Does docker use service name or container name to resolve service reference in docker compose?

redis:
    image: redis
    container_name: my-redis

如果我有上面的 docker compose.yml 文件,那么我需要在其他地方,例如,引用 redis 主机,我应该在客户端中使用 redis 还是 my-redis连接字符串?

假设您在同一个 docker 网络中,您可以同时使用两者来寻址 redis。

services:
  redis:
    image: redis
    container_name: my-redis

容器名称将是my-redis,但它也被注册到network aliasredis

当您只有一个容器时,别名可能没有用,或者它的用处可能不明显。当您部署超过 1 replica.

的内容时,它开始变得有用

您可以通过检查容器看到这一点。

docker inspect my-redis

您也可以保留容器名称,让 compose 使用默认容器名称 <project>-<service>-<replica>,即 myproject-redis-1。事实上,当你想部署多个副本时,这是必需的,因为你不能部署多个同名容器。

name: myproject
services:
  redis:
    image: redis
    deploy:
      replicas: 2

通常,人们使用服务名称而不是容器名称。