假设我想要一个设置 2 个服务的 docker-compose.yml:一个 postgresql 服务器和 adminer (一种 phpmyadmin)。 如果我声明
# docker-compose.yml
version: '3.1'
services :
myservername:
image: postgres:10-alpine
ports:
- 5432:5432
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
admin:
image: adminer
restart: always
ports:
- 8080:8080
使用 docker-compose up -d
然后在 localhost:8080 上我可以连接到 postgres :
这就像一个魅力。完美的。但是……
但由于我项目中的特定配置文件,我需要将 postgres 服务器名称设为 localhost
。所以我尝试了:
# docker-compose.yml
version: '3.1'
services :
localhost: # <----- that's the change
image: postgres:10-alpine
ports:
- 5432:5432
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
admin:
image: adminer
restart: always
ports:
- 8080:8080
当我尝试连接时:
SQLSTATE[08006] [7] 无法连接到服务器:连接被拒绝服务器是否在主机“localhost”(127.0.0.1) 上运行并在端口 5432 上接受 TCP/IP 连接?无法连接到服务器:地址不可用服务器是否在主机“localhost”(::1) 上运行并在端口 5432 上接受 TCP/IP 连接?
有什么想法吗?
最佳答案
您可以使用 docker 主机网络模式来完成这项工作,其中容器使用主机网络而不是获取自己的隔离网络,请参阅 https://docs.docker.com/network/host/和 https://docs.docker.com/compose/compose-file/#network_mode .
不过这存在一定的安全风险(因为容器可以完全访问主机网络)。 不应在生产中使用 :)
但是像这样:
version: '3.1'
services :
myservername:
network_mode: host
image: postgres:10-alpine
ports:
- 5432:5432
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
admin:
network_mode: host
image: adminer
restart: always
ports:
- 8080:8080
关于postgresql - 如何使用 docker-compose 设置 postgres 的服务器名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59194471/