我有一个Spring启动应用程序,它使jdbc连接到不同VPC中的数据库。从本地我无法访问此数据库,所以当我在本地部署我的应用程序时,我必须打开一个ssh隧道才能连接到数据库。这就是隧道的设置方式:
ssh -L 61616:data_base_host:data_base_port myuser@tunnel_server
然后我的应用程序使用:
连接jdbc:sqlserver://localhost:61616....
现在我需要将我的应用程序放在Docker容器中。这就是我运行docker镜像的方式:
docker run -p 9018:9018 myapp
9018是http端口。当Spring Boot应用程序在Docker内启动时,它无法连接到数据库。错误是:
Failed to initialize pool: The TCP/IP connection to the host localhost, port 61616 has failed.
所以我需要将容器内的端口61616绑定到主机中的端口61616。我能够使用这个jdbc URL修复我的问题:
jdbc:sqlserver://docker.for.mac.localhost:61616
使用别名 docker.for.mac.localhost 可以解决这个问题,但它是面向Mac平台的解决方案。我也尝试过:
docker run -p 9018:9018 -p 61616:61616 myapp
并没有工作。
有什么想法吗?
答案 0 :(得分:0)
我不知道你是如何在docker中运行你的应用程序的。我有一个 Dockerfile 正在运行。
注意:根据您的要求更改端口
FROM openjdk:8-jre-alpine
ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \
APP_SLEEP=0 \
JAVA_OPTS=""
ADD *.war /app.war
EXPOSE 8080
CMD echo "The application will start in ${APP_SLEEP}s..." && \
sleep ${APP_SLEEP} && \
java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.war
创建 docker-compose.yml 文件
version: '2'
services:
sample-app:
image: sample
environment:
- SPRING_PROFILES_ACTIVE=prod,swagger
- SPRING_DATASOURCE_URL=jdbc:sqlserver://sample-mssql:1433;database=testdb
- APP_SLEEP=10 # gives time for the database to boot before the application
ports:
- 8080:8080
sample-mssql:
image: microsoft/mssql-server-linux:latest
# volumes are not supported on macOS
# volumes:
# - ~/volumes/jhipster/testdb/mssql/:/var/opt/mssql/data/
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=yourStrong(!)Password
ports:
- 1433:1433
创建泊坞窗图像
docker build -t sample。
生成强>
docker-compose up -d