docker - 如何使用带有docker-compose的容器名称连接容器?

标签 docker docker-compose dockerfile

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

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

需要这样做的主要原因是,当容器旋转时,它们没有静态IP地址,因此在pgadmin中,我无法每次都使用相同的IP连接到postgresql DB,因此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

最佳答案

实际上,我发现了一个紧迫的问题:

version: "0.1"

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

参见例如Compose file version 3 reference

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

顺便说一句,除非有特殊原因,否则我将在您的撰写文件中删除container_name的使用,因为这使您无法在主机上运行同一compose文件的多个实例。

关于docker - 如何使用带有docker-compose的容器名称连接容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55643417/

相关文章:

docker - 在没有互联网连接的情况下运行 docker compose 文件

php - 带有 php、mysql 和 apache 的 CentOS 上的 Docker 镜像

node.js - Docker 容器内的 Nodemon

docker - Docker/Docker-Compose 中的 NFS 卷

docker - custom.ini 被 Grafana docker 镜像忽略

mysql - 持久化 dockerized WordPress(使用 LAMP 堆栈)

node.js - 使用 docker-compose 在 Docker 容器中锁定 package.json 文件

docker - 在容器和主机之间共享文件

elasticsearch - 如何在一个 docker compose 文件中包含 Elastic Search(具有多个节点)和 Kibana?

ubuntu - 在 docker build 的一个步骤中在容器中运行后台进程