我想通过使用localhost:5432
从service2容器内部访问service1。怎么才能做到呢?
这是我的docker组成目前的样子:
services:
service1:
image: postgres:12
ports:
- '172.10.1.1:5432:5432'
expose:
- '5432'
environment:
- POSTGRES_USER=project
- POSTGRES_PASSWORD=pass
volumes:
- db_data:/var/lib/postgresql/data
service2:
build: .
ports:
- '172.10.1.1:1234:1234'
请注意,我知道我可以通过使用service1:5432
或service1
访问它。但如果可能的话,我想使用localhost
。
这是不可能的,因为每个容器都有自己的ip。
但是有一个解决方法:选择"network"为"host"。因此,端口在hostmaschine上是打开的,并且可以通过127.0.0.1
访问。
但是我不知道你为什么喜欢用localhost
为postgres的好理由?您正在尝试通过localhost
进行身份验证吗?不要那样做,用密码代替。
使用主机网络可能是您正在寻找的解决方案https://docs.docker.com/network/host/
services:
service1:
image: postgres:12
network_mode: host
expose:
- '5432'
environment:
- POSTGRES_USER=project
- POSTGRES_PASSWORD=pass
volumes:
- db_data:/var/lib/postgresql/data
service2:
build: .
network_mode: host