2017-10-17 161 views
0

我有一個Spring引導應用程序,使jdbc連接到不同VPC中的數據庫。從我的本地我沒有訪問這個數據庫,所以當我在本地部署我的應用程序時,我必須打開一個ssh隧道才能連接到數據庫。這是怎樣的隧道被設置:連接到一個端口從碼頭集裝箱到主機打開的端口

ssh -L 61616:data_base_host:data_base_port [email protected]_server 

然後我的應用程序連接使用:

jdbc:sqlserver://localhost:61616.... 

現在我需要把我的應用程序碼頭工人,容器內。這是我如何運行我的泊塢窗圖像:

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

碼頭工人並沒有提供一種簡單的方式來獲得主機的IP。根據docker方法,如果你在應用程序中運行容器,則不需要在主機上運行db,你還應該容納它。如果數據庫位於容器內部,則很容易連接到數據庫。不過,你可以嘗試一些解決方法,看看這個答案的第二部分https://stackoverflow.com/a/24326540/2065796 你也可以考慮一個選項,從docker容器內部建立ssh隧道。 –

回答

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 

創建泊塢窗,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 

創建一個泊塢窗圖像

泊塢窗構建-t樣本。

RUN

碼頭工人,組成了-d

+0

這是一個彈簧啓動應用程序,它是一個jar文件。這是我的CMD: CMD java -jar lq-rateloader。jar -Denv1 = value1 ... 我有很多-D變量。 – Perimosh

+0

您可以更改您的dockerfile,撰寫文件適用於任何情況。 –

+0

我想你不明白我的問題。在我的主機上,我通過端口61616設置了一個ssh隧道。我需要讓我的Docker鏡像通過主機發送jdbc連接。 – Perimosh

相關問題