从另外 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