从另外 3 个 docker 个容器访问 MySQL
Access MySQL from 3 other docker containers
目前我正在尝试设置三个不同的 docker 容器(php 和 apache)并让它们收听第 4 个,其中我的 sql 服务器是 运行 .
有人知道如何让我的 mysql 容器监听其他 3 个容器吗?
您可以在其他容器(apache、php...)的 docker run
中执行 --link mysql:mysql
,它将作为 mysql
在容器。类似于:
docker run -d -p 3306:3306 --name mysql my/mysql
docker run -d -p 8080:8080 --name apache --link mysql:mysql my/apache
希望对您有所帮助。
如果容器连接到同一自定义 docker 网络,则它们可以相互交互。网络提供 "isolation"(即,只有连接到同一网络的容器才能交互),如果您为容器指定了 name,则容器能够找到每个容器其他使用容器名称作为主机名。
虽然您可以使用旧版 --link
选项获得类似的结果,但 --link
例如;
为您的应用程序创建一个名为 "private-net"
的网络
docker network create private-net
启动一个名为 "db" 的 MySQL 容器,并告诉 docker 将其连接到 "private-net" 网络。注意其他容器不需要"publish"3306端口连接;如果您希望它可以公开访问(例如让您的网络服务器可以从互联网访问),您应该仅发布(-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
and docker network disconnect
命令从网络 connect/disconnect 容器。容器可以连接到多个网络,如果您有一个由多个应用程序共享的服务,这会很有用。
有关 Docker 网络的更多信息,请阅读此处的文档:work with network commands
目前我正在尝试设置三个不同的 docker 容器(php 和 apache)并让它们收听第 4 个,其中我的 sql 服务器是 运行 . 有人知道如何让我的 mysql 容器监听其他 3 个容器吗?
您可以在其他容器(apache、php...)的 docker run
中执行 --link mysql:mysql
,它将作为 mysql
在容器。类似于:
docker run -d -p 3306:3306 --name mysql my/mysql
docker run -d -p 8080:8080 --name apache --link mysql:mysql my/apache
希望对您有所帮助。
如果容器连接到同一自定义 docker 网络,则它们可以相互交互。网络提供 "isolation"(即,只有连接到同一网络的容器才能交互),如果您为容器指定了 name,则容器能够找到每个容器其他使用容器名称作为主机名。
虽然您可以使用旧版 --link
选项获得类似的结果,但 --link
例如;
为您的应用程序创建一个名为 "private-net"
的网络docker network create private-net
启动一个名为 "db" 的 MySQL 容器,并告诉 docker 将其连接到 "private-net" 网络。注意其他容器不需要"publish"3306端口连接;如果您希望它可以公开访问(例如让您的网络服务器可以从互联网访问),您应该仅发布(-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
and docker network disconnect
命令从网络 connect/disconnect 容器。容器可以连接到多个网络,如果您有一个由多个应用程序共享的服务,这会很有用。
有关 Docker 网络的更多信息,请阅读此处的文档:work with network commands