我对Docker很陌生,但我正在尝试用它来清理我的一些项目。一个这样的项目是一个相当简单的PHP / MySQL应用程序。我和#34;码头化了#34;应用程序通过添加dber和comp服务的docker-compose.yml。这是我的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
这可以正常工作,但我必须更改所有PHP脚本才能使用" db"而不是" localhost"连接到mysql数据库时。我添加docker的东西只是为了清理开发,所以我试图避免更改PHP代码本身。有没有办法可以配置这个,以便我能够使用localhost或127.0.0.1进行连接?
答案 0 :(得分:1)
您可以使用以下两个步骤实现此目的
1)将以下CMD添加到您的Dockerfile
CMD sed -e '/localhost/ s/^#*/#/' -i /etc/hosts
2)替换' db'与' localhost'在docker-compose.yml
中 links:
- db
db:
image: mysql:5.5
作为
links:
- localhost
localhost:
image: mysql:5.5
答案 1 :(得分:1)
Docker不允许您修改容器上的/ etc / hosts Known issue
您可以使用入口点选项
编辑/ 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)。