docker - 从Docker容器以localhost身份访问数据库

标签 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:/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/

相关文章:

image - 为什么不能在 docker swarm 集群中自动从 aws 上的 ecr 拉取图像?

amazon-web-services - 启动 ec2 服务器时自动启动 docker

android - 如何在docker-compose.yml中指定* .apk的正确路径并配置appium功能

docker - 在Docker容器中启动 `pktgen`应用程序时vdev_probe()失败

docker - 是否有真正的配置作为 jupyter notebook/labs 的代码?

docker - 如何使用 Dockerfile 进行 docker 构建?

java - 针对 docker 中的服务进行集成测试

database - 由于错误,Docker postgres 启动自动化无法创建数据库

Docker 组合重用卷

windows - Docker(适用于 Windows)不挂载卷