2017-06-14 88 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内部使用哪一个? –