Ibr*_*tes 6 postgresql docker spring-boot
我想构建我的 springboot 项目。然后我想dockerize我的代码。但是当我构建时,我得到了错误。我认为这是由 postgresql 设置引起的。但我找不到原因。
请你帮助我好吗?
docker-compose.yml file;
version: '2'
services:
web:
build: .
ports:
- 8080:8080
db:
container_name: productdb
image: postgres:9.5
volumes:
- sample_db:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=bright
- POSTGRES_USER=postgres
- POSTGRES_DB=productdb
- PGDATA=/var/lib/postgresql/data/pgdata
ports:
- "5432:5432"
volumes:
productdb: {}
Run Code Online (Sandbox Code Playgroud)
application.yml 文件;
server:
port: 8761
eureka:
client:
registerWithEureka: false
fetchRegistry: false
server:
enableSelfPreservation: false
waitTimeInMsWhenSyncEmpty: 0
spring:
application:
name: product-service
datasource:
url: jdbc:postgresql://db:5432/productdb
username: postgres
password: xxxx
initialization-mode: always
jpa:
show-sql: true
hibernate:
ddl-auto:
properties:
hibernate:
temp:
use_jdbc_metadata_defaults: false
Run Code Online (Sandbox Code Playgroud)
错误看起来像;
org.postgresql.util.PSQLException:连接尝试失败。
谢谢
如果你的 docker-compose.yml 文件配置良好,它应该启动两个容器:
docker ps
Run Code Online (Sandbox Code Playgroud)
来源:https ://intelligentbee.com/2017/09/18/setup-docker-symfony-project/
一种用于应用程序,一种用于数据库。
这些容器位于同一主机中,因此如果您的 Web 需要连接到数据库,则必须改为 ip:localhost、127.0.0.1 或 0.0.0.0
你用这个获取ip
hostname -I| awk '{printf $1}'
Run Code Online (Sandbox Code Playgroud)
如果您的网站和数据库位于不同的主机上,您可以使用托管数据库的公共 IP。但当您使用docker-compose时,情况并非如此。
我建议您在网络应用程序中使用数据库之前先测试一下数据库是否已准备就绪且可用。
为了测试您的数据库,您可以遵循以下方法之一:
有多种方法,但最简单的选择是telnet命令。例如,为了测试 mysql 容器是否可以在启动的同一台机器上使用:
telnet localhost 3306
Run Code Online (Sandbox Code Playgroud)
如果你的mysql已经准备好了,telnet一定会显示如下图所示的结果:
任何其他负面结果,都表明您的 mysql 容器已退出或错误。
注意:将 3306 更改为正确的 postgress 端口
UI 用户的其他选择是使用某些数据库 IDE 测试数据库连接。只需下载几个 postgress 客户端 IDE 之一并测试您的数据库即可。
使用环境变量外部化配置是一个很好的做法。Spring 和 docker知道并允许我们使用它们。
因此,修改您的application.yml:
从
datasource:
url: jdbc:postgresql://db:5432/productdb
Run Code Online (Sandbox Code Playgroud)
到
datasource:
url: jdbc:postgresql://${DATABASE_HOST}:5432/productdb
Run Code Online (Sandbox Code Playgroud)
对于开发,在您的 Eclipse 中使用“作为配置运行>>环境”部分
对于生产,您可以:
docker run -d \
--name my_funny_api \
-p 8080:8080 \
-e "DATABASE_HOST=10.10.01.52" \
-i -t my_funny_api_image
Run Code Online (Sandbox Code Playgroud)
或者
export HOST_IP=$(hostname -I| awk '{printf $1}')
docker run -d \
--name my_funny_api \
-p 8080:8080 \
-e "DATABASE_HOST=${DATABASE_HOST}" \
-i -t my_funny_api_image
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12832 次 |
| 最近记录: |