2017-06-14 57 views
4

我知道這個問題可能會重複,但我沒有得到任何明確的答案。因爲我對碼頭概念完全陌生。如何將本地託管的MySQL數據庫連接到碼頭集裝箱

通過docker-compose.yml我能夠運行該應用程序。現在我們要將應用程序移至生產環境,但我們不想使用容器數據庫。那麼有什麼辦法可以讓我可以使用docker-compose連接我的本地MySQL數據庫和應用程序?

我的搬運工,compose.yml樣子:

version: '3' 
services: 
    web-app: 
    build: 
     context: . 
     dockerfile: web-app/Dockerfile 
    ports: 
     - 8080:8080 
    links: 
     - app-db 

    app-db: 
    build: 
     context: . 
     dockerfile: app-db/Dockerfile 

    environment: 
    - MYSQL_ROOT_PASSWORD=password 
    - MYSQL_DATABASE=Optimize 
    ports: 
     - 3306:3306 

一部分,而不是app-db我只是想連接到我的本地託管mysql數據庫。任何幫助將不勝感激。

+1

的[可能的複製從泊塢窗容器內,我如何連接到的本地主機機器?](https://stackoverflow.com/questions/24319662/from-inside-of-a-docker-container-how-do-i-connect-to-the-localhost-of-the-mach) – Iman

回答

6

在碼頭網絡中查找主機ip。如果您使用的碼頭工人,compose.yml version: "3"這可能是該IP是:172.18.0.1但確認搜索的你的容器的「網關」(主機):

docker inspect <container-id-or-name> | grep Gateway 
"Gateway": "", 
      "IPv6Gateway": "", 
      "Gateway": "172.18.0.1", 
      "IPv6Gateway": "", 
您的碼頭工人的應用程序裏面點

所以到MySQL如下:172.18.0.1:3306(也許在配置文件中)。考慮到只要docker網絡仍然一樣(網絡是由docker-compose創建的,除非你做docker-compose down,否則它不會被刪除),這個IP是固定的

另外,檢查你的MySQL是否在監聽所有的接口。在您的my.cnf搜索bind-address應該是0.0.0.0(如果您的服務器具有公共IP,請考慮安全問題)。


正如你可以給容器相同的網絡爲您的主機,以共享本地主機的替代,因此容器會發現MySQL的存在。使用網絡模式爲「主人」:

version: '3' 
services: 
    web-app: 
    build: 
     context: . 
     dockerfile: web-app/Dockerfile 
    ports: 
     - 8080:8080 
    network_mode: "host" 

然後,點中你的hibernate.properties到MySQL,因爲這:localhost:3306

+0

我得到了 'docker inspect | grep的網關 「網關」: 「」, 「IPv6Gateway」: 「」, 「網關」: 「172.19.0.1」, 「IPv6Gateway」: 「」,' 但一旦我創作,我得到這個[日誌文件](https://gist.github.com/Beanben/03b87968283c2207fdb4cdf4544d91b7) –

+0

你知道你的應用程序的配置文件在哪裏嗎?要相應更新 – Robert

+0

您的意思是web應用程序'hibernate.properties'文件? –

0

只需在docker中使用172.17.0.1即可。其主機的靜態IP地址

+1

如何以及在docker內部使用哪一個? –

相關問題