如何连接到Docker Swarm中的Postgresql服务?
我有一个Docker Swarm集群设置与3个服务器(1个经理和2个工人)。
我使用下面的命令启动了Postgresql服务:
docker service create --name postgresql \ --mount src=pg_data,dst=/var/lib/postgresql/data/pgdata \ -p 6542:5432 \ -e POSTGRES_USER="user" \ -e POSTGRES_DB="db" \ -e POSTGRES_PASSWORD="pass" \ -e PGDATA=/var/lib/postgresql/data/pgdata \ --constraint 'node.role == manager' \ postgres
我以前也创build了数据量:
docker volume create pg_data
现在,我有另一个服务,我想要启动,这基本上是一个Java应用程序,我捆绑到一个Docker镜像,我想连接到postgresql服务。 我尝试了以下组合的url:
jdbc:postgresql://172.18.0.1:5432 / db(docker_gwbridge)
jdbc:postgresql://172.17.0.1:5432 / db(docker0)
JDBC:在PostgreSQL://本地主机:5432 / DB
JDBC:在PostgreSQL:// PostgreSQL的:5432 / DB
任何想法可以工作?
您应该使用群集overlay network
以群集模式连接到您的数据库。
首先创build覆盖networking:
docker network create -d overlay mynet
然后让你的postgresql
服务使用这个networking:
docker service create --name postgresql \ --mount ... \ --network mynet \ postgres
然后,不要忘记为您的Java应用程序容器使用相同的networking:
docker service create --name myjavaapp \ --network mynet \ myjavaapp
然后你可以连接到你的postgresql
通过DNS名称,如:
jdbc:postgresql://postgresql:5432/db
在mynet
networking中的所有服务容器(可以根据需要调用它,它只是一个名称引用),具有对应于服务名称的DNS条目。 这比在启动Java应用程序之前通过docker inspect
检索容器的IP更容易。
你甚至可以在你的postgresql docker服务中避免publish
端口-p 6542:5432
,因为你可能不想把这个发布给别人。
您可以查看官方文档,以更好地了解群集模式下的networking 。
这个SO QA也谈到了覆盖networking。