我刚接触Docker,但是正在尝试使用它来清理我的一些项目。这样的项目之一是一个相当简单的PHP / MySQL应用程序。通过添加带有db和php服务的docker-compose.yml,我对应用程序进行了“docker化”。这是我的docker-compose.yml:
version: '2'
services:
php:
build: .
ports:
- "80:80"
- "443:443"
volumes:
- ./public_html:/var/www/html
links:
- db
db:
image: mysql:5.5
ports:
- "3306:3306"
environment:
MYSQL_USER: root
MYSQL_PASSWORD:
MYSQL_ROOT_PASSWORD:
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
- /c/dockerdata:/var/lib/mysql
这可以正常工作,但是在连接到mysql数据库时,我必须将所有PHP脚本更改为使用“db”而不是“localhost”。我添加docker东西只是为了清理开发,因此我试图避免更改PHP代码本身。有没有一种方法可以配置它,以便能够使用localhost或127.0.0.1进行连接?
最佳答案
Docker不允许您修改容器Known issue上的/ etc / hosts
您可以使用入口点选项编辑/ etc / hosts
创建entrypoint.sh脚本
#!/bin/bash
cp /etc/hosts /tmp/hosts
sed -e '/localhost/ s/^#*/#/' -i /tmp/hosts
cp /tmp/hosts /etc/hosts
# add your command here to run php application
将执行权限添加到entrypoint.sh
chmod +x entrypoint.sh
将以下两行添加到Dockerfile中
ADD entrypoint.sh /entrypoint.sh
ENTRYPOINT /entrypoint.sh
现在,从我先前的答案中执行步骤2)。
关于docker - 从Docker容器以localhost身份访问数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38990951/