docker-compose.yml
version: '3.8'
services:
db:
image: postgres
restart: always
container_name: security-db
environment:
POSTGRES_DB: security-db
POSTGRES_USER: scrty
POSTGRES_PASSWORD: scrty123
ports:
- '5050:5432'
应用程序.属性
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.datasource.url=jdbc:postgresql://localhost:5050/security-db
spring.datasource.username=scrty
spring.datasource.password=scrty123
spring.jpa.hibernate.ddl-auto=update
我正在尝试在 Docker 容器内运行我的 Spring Boot 应用程序,并且还在另一个 Docker 容器中运行 PostgreSQL 数据库。但是,我的应用程序无法与 PostgreSQL 数据库建立连接。
问题是,容器运行在不同的网络中,因此无法相互通信。您可以通过将应用程序也放入您的
docker-compose.yaml
中来解决此问题,因为 docker compose 会自动创建网络并且所有服务都会加入。为此,您可以像这样更改您的 docker-compose.yaml
:
解决方案1:
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
image: app:latest
db:
image: postgres
restart: always
container_name: security-db
environment:
POSTGRES_DB: security-db
POSTGRES_USER: scrty
POSTGRES_PASSWORD: scrty123
ports:
- '5050:5432'
这样,如果您不想从主机访问数据库,则根本不需要公开端口
5050
。在app.image
中你可以输入任何你想要的内容,这是你的图像名称,当你执行docker compose up --build
时,它将被创建并标记。 app.build.context
将指定 docker 构建上下文,app.build.dockerfile
将指定您的 Dockerfile
。
解决方案2.
您还可以使用以下命令手动创建网络:
docker network create -d bridge my-bridge-network
这将创建一个名为
my-bridge-network
的 docker 网络。现在您必须将两个容器连接到该网络。对两个容器(数据库和应用程序)执行以下命令
docker network connect <NETWORK> <CONTAINER>
将
<NETWORK>
替换为您创建的网络名称,将 <CONTAINER>
替换为您的容器名称。