我使用过 docker-compose.yaml。我在 docker-compose.yml 中配置如下:
第 1 步:在 docker-compose.yaml 中,我使用以下代码
services:
postgres:
image: postgres
container_name: postgres
hostname: postgres
volumes:
- db-data:/var/lib/postgresql/data
restart: always
ports:
- 5432:5432
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: accountdb
account-opening:
image: ehaque95/pocv1-account-opening:0.0.1-SNAPSHOT
mem_limit: 700m
ports:
- "8081:8081"
networks:
- account-network
depends_on:
- postgres
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/accountdb
volumes:
db-data:
第 2 步:
我在 spring boot 中配置了 applicaiton.yml 如下:
spring:
datasource:
url: jdbc:postgresql://postgres:5432/accountdb
username: postgres
password: postgres
jpa:
database-platform: org.hibernate.dialect.PostgreSQLDialect
database: postgresql
hibernate:
ddl-auto: update
properties:
dialect: org.hibernate.dialect.PostgreSQLDialect
注意:postgresql 服务器 IP 经常变化。当我运行 docker inpspect 时,它会显示一些 "IPAddress": "172.19.0.2" 或有时 "IPAddress": "172.19.0.3"。它在我运行时显示 <再次强>docker-compose up。
它显示连接错误。我的代码连接到 postgresql 有什么问题。请帮帮我
答案 0 :(得分:1)
要让两个容器相互通信,它们必须在同一个 Docker 网络上。 By default,Compose 创建一个名为 default
的网络并将容器附加到它;如果您为容器指定其他 networks:
,则它们不会连接到 default
网络。
在您的 docker-compose.yml
中,account-opening
容器有一个 networks:
块,但 postgres
没有:
version: '3.8'
services:
postgres:
...
# no networks:, so implicitly
# networks: [default]
account-opening:
...
networks: [account-network] # and not default
# The postgres container is on the default network
# This container is on account-network
# And so this host name doesn't resolve
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/accountdb
使用 default
网络没有任何问题。对于大多数典型应用程序,您可以删除整个文件中的所有 networks:
块。然后将使用默认设置创建 default
网络,所有容器都将连接到该网络,并能够通过它们的 Compose 服务名称相互寻址。
答案 1 :(得分:-1)
试试
url: jdbc:postgresql://localhost:5432/accountopendb
如果您在数据源配置中的同一台机器上同时运行 spring 应用程序和 postgresql 容器。