如何链接两个docker容器,以及如何在mysql docker容器上使用mysql客户端

如何链接两个docker容器,以及如何在mysql docker容器上使用mysql客户端,mysql,docker,Mysql,Docker,我想测试一下。他们建议使用-link mysql:db连接到mysql docker,如下所示: docker run -d -p 80:80 --name webtrees --link mysql:db -v /webtrees/data:/var/www/html/data -v /webtrees/media:/var/www/html/media -e DISABLE_SSL=TRUE -e PORT=80 --restart always dtjs48jkt/webtrees d

我想测试一下。他们建议使用-link mysql:db连接到mysql docker,如下所示:

docker run -d -p 80:80 --name webtrees --link mysql:db -v /webtrees/data:/var/www/html/data -v /webtrees/media:/var/www/html/media  -e DISABLE_SSL=TRUE -e PORT=80 --restart always dtjs48jkt/webtrees
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=webtrees -e MYSQL_USER=my_user -e MYSQL_PASSWORD=my_pwd -d mysql:5.5
他们的自述说:

该映像不包含MySQL数据库。相反,您必须使用单独的MySQL实例。例如,您可以使用 MySQL Docker映像。使用-link参数可以直接连接到 可以在其他容器中建立数据库。如果你使用 -link参数足以设置为数据库主机名db 和3306端口。数据库用户必须拥有对的所有访问权限 创建必要的数据库和表

但是webtrees容器无法访问mysql服务器。如何正确链接这两个docker容器

我试着使用官方软件如下:

docker run -d -p 80:80 --name webtrees --link mysql:db -v /webtrees/data:/var/www/html/data -v /webtrees/media:/var/www/html/media  -e DISABLE_SSL=TRUE -e PORT=80 --restart always dtjs48jkt/webtrees
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=webtrees -e MYSQL_USER=my_user -e MYSQL_PASSWORD=my_pwd -d mysql:5.5
但我不知道如何将webtrees docker容器和mysql容器链接起来

另外,如何使用mysql客户端?文档给出了这个示例,但我不明白netowrk和-h的正确参数是什么:

$ docker run -it --network some-network --rm mysql mysql -hsome-mysql -uexample-user -p

基本上,您需要将所有容器mysql DB服务器、mysql客户端和应用程序放在同一个Docker网络中。默认情况下,它们不是。或者,-link可以用来链接它们,如webtrees运行示例所示,但它被认为是遗留功能,应该使用网络来代替它。 因此,您需要做的是:

创建自定义Docker网络: docker网络创建用户网络 在该网络中运行mysql服务器。名称应为db,因为webtrees依赖于该主机名作为db: docker run-name db-network user network-e MYSQL\u ROOT\u PASSWORD=my secret pw-e MYSQL\u DATABASE=webtrees-e MYSQL\u user=my\u user-e MYSQL\u PASSWORD=my\u pwd-d MYSQL:5.5 在同一网络中运行mysql客户端: docker run-it-network user-network-rm mysql-hdb-umy_user-p 最后,您可以在同一网络中运行应用程序: docker run-d-p 80:80-name webtrees-network user-network-v/webtrees/data:/var/www/html/data-v/webtrees/media:/var/www/html/media-e DISABLE\u SSL=TRUE-e PORT=80-始终重新启动dtjs48jkt/webtrees
之后,web应用程序应该可以在以下位置从浏览器访问:http://localhost/

关于您的第一个问题,docker run的-link选项根据的不推荐使用,因此我不建议使用它

考虑到所需的配置量,我建议改为设置docker-compose.yml。我将您需要的配置设置为:

版本:“3.0” 服务: 网络树: 图片:dtjs48jkt/webtrees 重新启动:始终 端口: - 80:80 环境: -禁用\u SSL=TRUE -端口=80 卷数: -/webtrees/data:/var/www/html/data -/webtrees/media:/var/www/html/media 网络: -我的网络 mysql: 图片:mysql:5.5 环境: -MYSQL\u ROOT\u PASSWORD=my secret pw -MYSQL\u DATABASE=webtrees -MYSQL\u USER=我的用户 -MYSQL\u PASSWORD=my\u pwd 网络: -我的网络 网络: 我的网络: 要运行容器,请使用:

docker-compose up --detach
这将根据您在问题中指定的配置,使用一个名为my network的网络来启动mysql容器和webtrees容器

在web界面上的web树http://localhost/ 您可以通过以下配置使其连接到mysql容器,因此它将通过docker网络连接到mysql容器:

因为docker-compose.yml中的服务名是mysql,所以所需的主机名是mysql