目前我正在尝试设置三个不同的docker容器(php和apache),让他们听第四个我的sql server正在运行的容器。 有人知道如何让我的mysql容器听取其他3个容器吗?
答案 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 connect
和docker 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
希望它有所帮助。