版本
操作系统:macos high sierra:10.13.6
Docker :18.06.0-ce-mac70(26399)
编写:1.22.0
我有一个现有的wordpress网站,我想包含。为了测试,数据库运行在本地的vagrant vm上,最终该数据库将托管在aws上。最终测试完成后,我将创建一个 Dockerfile
但现在在测试的时候,我用的是 docker-compose
.
version: '3.3'
services:
wordpress:
image: wordpress:latest
volumes:
- ./wordpress/:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: ${DB_HOST_IP}
WORDPRESS_DB_NAME: ${DB_NAME}
WORDPRESS_DB_USER: ${DB_USER}
WORDPRESS_DB_PASSWORD: ${DB_PASS}
如您所见,在我的示例中使用了一些环境变量 .env
. 跑步 docker-compose config
显示信息已正确加载,因此这不是问题所在。
输出
docker-compose up
[website name]_wordpress_1 is up-to-date
Attaching to [website name]_wordpress_1
wordpress_1 |
wordpress_1 | MySQL Connection Error: (2002) Connection timed out
wordpress_1 |
wordpress_1 | Warning: mysqli::__construct(): (HY000/2002): Connection timed out in Standard input code on line 22
wordpress_1 |
wordpress_1 | Warning: mysqli::__construct(): (HY000/2002): Connection timed out in Standard input code on line 22
wordpress_1 |
wordpress_1 | MySQL Connection Error: (2002) Connection timed out
wordpress_1 |
wordpress_1 | Warning: mysqli::__construct(): (HY000/2002): Connection timed out in Standard input code on line 22
wordpress_1 |
wordpress_1 | MySQL Connection Error: (2002) Connection timed out
最后,奇怪的是,以前使用过这种精确的配置,甚至在过去修复了相同的问题。我通过重新启动vagrant vm和docker守护进程来修复它。但现在这样做并没有解决问题。
这个问题的根源是什么?
编辑
我换了衣服 WORDPRESS_*
至 MYSQL_*
在 docker-compose
文件。终端的输出表明它在工作。但是,当转到localhost和相应的文件时,加载会花费很长时间,当它最终到达时,我会得到输出“error building a database connection”的页面。
我也不确定出了什么问题。我可以使用我的sql客户端(sequel pro)以相同的凭据登录数据库,一切正常。这让我认为 docker-compose
文件本身。
编辑2
进入跑步形象 docker exec -t [image name] bash
然后ping数据库ip显示它没有返回任何东西,但在我自己的终端中,它返回的数据包很好。所以这似乎是一个内部网络问题?
将数据库的详细信息更改为livesqlserver意味着一切都能按预期工作,所以现在,我必须坚持这一点,只是要小心。我仍然想找出什么问题,虽然与我的docker图像无法连接到本地数据库的内部网络。
1条答案
按热度按时间yk9xbfzb1#
默认情况下,docker容器在桥接网络模式下运行时无法访问主机。当您的容器尝试连接到localhost时,它正在连接到自己的容器,而不是主机mysql示例。
最好的办法是运行一个mysql容器,这对于dockercompose来说相当简单。
一个新的docker compose文件应该是这样的:
我使用
mysql
由于主容器配置中的主机名是docker compose,因此docker compose会根据服务的命名方式为您设置这些主机名。或者,因为您运行的是docker for mac,所以您可以使用
docker.for.mac.localhost
作为主机名。