我试图了解如何通过容器名称访问彼此之间的容器。特别是在使用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/