如何使用docker-compose将容器名称连接到容器?

问题描述 投票:0回答:2

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

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

需要这个的主要原因是当容器启动时它们没有静态IP地址,所以在pgadmin中我无法每次使用相同的IP连接到postgresql DB,所以dns名称会更好用(即:容器名称)。

我们可以使用docker-compose或者至少为特定容器设置静态IP地址吗?

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

networks:
  backed:

然后在服务中使用它:

app:
  networks:
    - backend

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

泊坞窗,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:
      - [email protected]
      - 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 docker-compose dockerfile
2个回答
2
投票

实际上,我发现了一个直接的问题:

version: "0.1"

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

version: "3"

参见例如Compose file version 3 reference

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

顺便说一下,除非你有一个特殊的原因,否则我会在你的撰写文件中放弃使用container_name,因为这样就无法在你的主机上运行同一个compose文件的多个实例。


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.