【问题标题】:How do I connect containers using container name with docker-compose?如何使用容器名称与 docker-compose 连接容器?
【发布时间】:2019-04-12 10:24:43
【问题描述】:

我试图了解如何通过容器名称在彼此之间访问容器。特别是在使用 pgadmin 容器并通过 dns 连接到 postgresql 容器时。

在 docker-compose V3 中,我无法链接它们,networks: 似乎也不可用。

需要这个的主要原因是当容器启动时它们没有静态 IP 地址,所以在 pgadmin 中我不能每次都使用相同的 IP 连接到 postgresql 数据库,所以一个 dns 名称可以工作更好(即:容器名称)。

我们可以使用 docker-compose 来做到这一点,或者至少为特定容器设置一个静态 IP 地址吗?

我已尝试创建用户定义的网络:

networks:
  backed:

然后在服务中使用它:

app:
  networks:
    - backend

这会导致有关应用程序中“网络”选项无效的 docker-compose 错误。

docker-compose.yml

version: "0.1"

services:
  devapi:
    container_name: devapi
    restart: always
    build: .
    ports:
      - "3000:3000"

  api-postgres-pgadmin:
    container_name: api-postgres-pgadmin
    image: dpage/pgadmin4:latest
    ports:
      - "5050:80"
    environment:
      - PGADMIN_DEFAULT_EMAIL=stuff@stuff.com
      - PGADMIN_DEFAULT_PASSWORD=12345

  api-postgres:
    container_name: api-postgres
    image: postgres:10
    volumes:
      - ./data:/data/db
    ports:
      - "15432:5432"
    environment:
      - POSTGRES_PASSWORD=12345

【问题讨论】:

  • 您能否进一步澄清这句话“我试图了解我如何通过容器名称在彼此之间访问容器。”?另外,为什么不能使用主机名在容器之间进行通信?
  • 另外,您的示例docker-compose.yml 没有显示您(尝试)使用networks。您可以更新它以包含它吗?它可能会突出显示您看到该错误的原因。

标签: docker docker-compose dockerfile


【解决方案1】:

实际上,我发现了一个迫在眉睫的问题:

version: "0.1"

你为什么要这样做?撰写文件格式的当前版本是 3.x。例如:

version: "3"

参见例如Compose file version 3 reference

版本决定了哪些功能可用。通过设置version: "0.1",您完全有可能明确禁用对networks 参数的支持。您会注意到reference 显示了使用networks 属性的示例。

顺便说一句,除非您出于特殊原因启用它,否则我会在您的撰写文件中放弃使用 container_name,因为这使得您无法在您的文件中运行同一 compose 文件的多个实例主持人。

【讨论】:

    【解决方案2】:

    networks 可从 docker-compose 版本 3 获得,但您在 docker-compose 文件中使用 version:"0.1"

    在 docker-compose.yml 中将 version: "0.1" 更改为 version: "3"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 1970-01-01
      • 2019-04-01
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      相关资源
      最近更新 更多