从docker容器作为本地主机访问数据库

从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

我对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进行连接?

您可以通过以下两个步骤实现这一点

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