从docker容器访问db作为localhost

时间:2016-08-17 07:50:10

标签: docker docker-compose

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

2 个答案:

答案 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)。