使用以下带有docker的命令创建我的服务:
docker service create --mount
type=bind,src=/tmp/postgres,dst=/var/lib/postgresql/data
--name dev_db
--network mynetwork -p 5432:5432 -d postgres
问题是如果我不使用覆盖网络--network
,我可以通过使用简单的postgresql客户端从另一台主机连接到这个docker实例:
psql -h (ipofthehost) mydatabase -Umydatabase
但是现在我想从另一台主机连接到它,我收到了这个错误:
psql:无法连接到服务器:连接被拒绝 服务器是否在主机“ipofdehost”上运行并接受 端口5432上的TCP / IP连接?
这告诉我它可能正在运行但却看不到它。 我验证了该服务是否正在运行:
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
8hr0qwtca230 dev_db replicated 1/1 postgres:latest *:5432->5432/tcp
我用ss验证了服务是否在监听:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::22 :::*
LISTEN 0 128 :::5432 :::*
LISTEN 0 128 :::12376 :::*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 128 :::443 :::*
看起来好像正在监听因为行:::5432
,但对我而言,它似乎只适用于ipv6连接,那么如何让它来监听ipv4连接?所有我改变了是因为我将该节点连接到覆盖网络,所以我不明白为什么如果我公开端口没有公开发布。
谢谢!