从其他3个docker容器访问MySQL

时间:2016-12-28 16:56:27

标签: php sql apache docker host

目前我正在尝试设置三个不同的docker容器(php和apache),让他们听第四个我的sql server正在运行的容器。 有人知道如何让我的mysql容器听取其他3个容器吗?

2 个答案:

答案 0 :(得分:4)

如果容器连接到同一个自定义泊坞网络,则容器可以相互交互。网络提供隔离" (即,只有连接到同一网络的容器才能进行交互),如果您为容器指定了名称,则容器可以使用容器名称作为主机名找到彼此

虽然您可以使用旧--link选项--link

获得类似的结果

例如;

为您的应用程序创建一个名为" private-net"

的网络
docker network create private-net

启动一个名为" db"的MySQL容器,并告诉docker将它连接到" private-net"网络。请注意,没有必要发布"端口3306用于连接其他容器;如果您希望将端口公开访问(例如,通过互联网访问您的Web服务器),则发布(-p)端口。

docker run -d --name=db  --net=private-net -e MYSQL_ROOT_PASSWORD="secret" mysql

启动您的应用程序容器。只是为了证明这里的原则;我们也使用mysql容器,但是以shell会话的形式交互启动它,以显示如何连接到数据库;

docker run -it --name=app --net=private-net mysql bash

root@fb5379f80508:/# # we're in the 'app' container
root@fb5379f80508:/# # connect to the mysql container, using it's name ('db') as hostname
root@fb5379f80508:/# mysql -h db -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.17 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> \q
Bye
root@fb5379f80508:/# # exiting the container
root@fb5379f80508:/# exit
exit

您可以使用docker network connectdocker network disconnect命令在运行时从网络连接/断开容器。容器可以连接到多个网络,如果您有多个应用程序共享的服务,这可能很有用。

有关Docker网络的更多信息,请阅读以下文档:work with network commands

答案 1 :(得分:0)

您可以在--link mysql:mysql其他容器(apache,php ...)中执行docker run,它将在容器内可用为mysql。类似的东西:

docker run -d -p 3306:3306 --name mysql my/mysql
docker run -d -p 8080:8080 --name apache --link mysql:mysql my/apache

希望它有所帮助。