ang*_*ian 5 java postgresql jdbc docker docker-swarm-mode
我有一个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
Run Code Online (Sandbox Code Playgroud)
我之前也创建过数据卷:
docker volume create pg_data
Run Code Online (Sandbox Code Playgroud)
现在,我有另一个我想要启动的服务,它基本上是一个捆绑到Docker镜像中的Java应用程序,我想将它连接到postgresql服务.我为网址尝试了以下组合:
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
知道什么可行吗?
您应该使用swarm overlay network在swarm模式下连接到数据库.
首先创建覆盖网络:
docker network create -d overlay mynet
Run Code Online (Sandbox Code Playgroud)
然后让您的postgresql服务使用此网络:
docker service create --name postgresql \
--mount ... \
--network mynet \
postgres
Run Code Online (Sandbox Code Playgroud)
然后,不要忘记为Java应用程序容器使用相同的网络:
docker service create --name myjavaapp \
--network mynet \
myjavaapp
Run Code Online (Sandbox Code Playgroud)
然后,您可以连接到您的postgresqlDNS名称,如:
jdbc:postgresql://postgresql:5432/db
Run Code Online (Sandbox Code Playgroud)
网络中的所有服务容器mynet(您可以根据需要调用它,它只是一个名称引用),具有与服务名称对应的DNS条目.这比docker inspect在启动Java应用程序之前检索容器的IP更容易.
您甚至可以避免在postgresql docker服务中使用该publish端口-p 6542:5432,因为您可能不希望将此公开给其他人.
您可以查看官方文档以更好地了解群集模式中的网络.
此SO QA还讨论了覆盖网络.
| 归档时间: |
|
| 查看次数: |
1406 次 |
| 最近记录: |