使用docker通过docker-compose将springboot连接到postgres。如果我尝试除端口失败以外的其他端口,则在postgres上使用端口5432可以正常工作
工作代码
Spring
spring.datasource.url=jdbc:postgresql://db:5432/wwc
spring.datasource.username=wwc
spring.datasource.password=test
spring.datasource.driver-class-name=org.postgresql.Driver
docker 组成
version: '2.1'
services:
db:
container_name: db
image: postgres:9.4
ports:
- 5432:5432
volumes:
- /tmp:/var/lib/postgresql
environment:
- POSTGRES_USER=wwc
- POSTGRES_DB=wwc
- POSTGRES_PASSWORD=test
server:
container_name: spring-boot-rest-server
build:
context: .
dockerfile: Dockerfile.server
ports:
- 8080:8080
logging:
driver: json-file
depends_on:
- db
web:
container_name: nginx-web
links:
- "server:springboot"
build:
context: .
dockerfile: Dockerfile.web
ports:
- 80:80
- 8088:8088
logging:
driver: json-file
depends_on:
- server
**连接被拒绝的代码**
Spring
spring.datasource.url=jdbc:postgresql://db:6000/wwc
spring.datasource.username=wwc
spring.datasource.password=test
spring.datasource.driver-class-name=org.postgresql.Driver
docker 组成
version: '2.1'
services:
db:
container_name: db
image: postgres:9.4
ports:
- 6000:5432
volumes:
- /tmp:/var/lib/postgresql
environment:
- POSTGRES_USER=wwc
- POSTGRES_DB=wwc
- POSTGRES_PASSWORD=test
server:
container_name: spring-boot-rest-server
build:
context: .
dockerfile: Dockerfile.server
ports:
- 8080:8080
logging:
driver: json-file
depends_on:
- db
web:
container_name: nginx-web
links:
- "server:springboot"
build:
context: .
dockerfile: Dockerfile.web
ports:
- 80:80
- 8088:8088
logging:
driver: json-file
depends_on:
- server
错误:
Spring 启动休息服务器| org.postgresql.util.PSQLException:到db:6000的连接被拒绝。检查主机名和端口是否正确以及邮局主管正在接受TCP / IP连接。
我究竟做错了什么?
最佳答案
您会混淆一些端口:您的“db”容器仅导出1个端口:5432。您在docker-compose中放置的6000是本地主机上的端口,您将其映射到该端口上的该容器(db)(5432) 。
除非您要从本地主机连接,否则我什至不应该为postgres容器使用端口映射。
如果要使用5432以外的其他端口,则需要扩展postgres Dockerfile并更改配置,以便postgres开始在其他端口上侦听。
希望这可以帮助。