从docker容器作为本地主机访问数据库
我对Docker很陌生,但我正试图用它来清理我的一些项目。其中一个项目是相当简单的PHP/MySQL应用程序。我通过添加带有db和php服务的docker-compose.yml使应用程序“docker化”。这是我的docker-compose.yml:从docker容器作为本地主机访问数据库,docker,docker-compose,Docker,Docker Compose,我对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
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进行连接?您可以通过以下两个步骤实现这一点 1) 将下面的CMD添加到Dockerfile
ADD entrypoint.sh /entrypoint.sh
ENTRYPOINT /entrypoint.sh
CMD sed-e'/localhost/s/^#*/#/'-i/etc/hosts
2) 将docker-compose.yml中的“db”替换为“localhost”
链接:
-分贝
db:
图片:mysql:5.5
作为
链接:
-本地主机
本地主机:
image:mysql:5.5
您可以通过以下两个步骤实现这一点
1) 将下面的CMD添加到Dockerfile
ADD entrypoint.sh /entrypoint.sh
ENTRYPOINT /entrypoint.sh
CMD sed-e'/localhost/s/^#*/#/'-i/etc/hosts
2) 将docker-compose.yml中的“db”替换为“localhost”
链接:
-分贝
db:
图片:mysql:5.5
作为
链接:
-本地主机
本地主机:
图:mysql:5.5
Docker不允许您修改容器上的/etc/hosts
您可以使用entrypoint选项编辑/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不允许您修改容器上的/etc/hosts 您可以使用entrypoint选项编辑/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)步。我得到以下结果:php_1 | sed:cannot rename/etc/sed6KFTSI:Device或resource busy我得到以下结果:php_1 | sed:cannot rename/etc/sed6KFTSI:Device或resource busy