连接到从docker容器到主机中打开的端口的端口

我有一个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启动应用程序在Docker内部启动时,它无法连接到数据库。 错误是:

 Failed to initialize pool: The TCP/IP connection to the host localhost, port 61616 has failed. 

所以我需要将容器内的端口61616绑定到主机的端口61616。 我能够解决我的问题使用这个jdbcurl:

 jdbc:sqlserver://docker.for.mac.localhost:61616 

使用别名docker.for.mac.localhost可以实现这个诀窍,但它是面向Mac平台的解决scheme。 我也试过:

 docker run -p 9018:9018 -p 61616:61616 myapp 

并没有工作。

有任何想法吗?

我不知道如何在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 

创build一个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 

创build一个泊坞窗图像

dockerbuild设-t样本。

docker工人 – 组成up -d