【问题标题】:docker-compose linking mysql and php containersdocker-compose 链接 mysql 和 php 容器
【发布时间】:2018-07-21 02:37:46
【问题描述】:

我有一个 docker-compose 如下:

version: '3.2'
services:
  web:
    build: .
    image: lap
    volumes:
      - ./webroot:/var/www/app
      - ./configs/php.ini:/usr/local/etc/php/php.ini
      - ./configs/vhost.conf:/etc/apache2/sites-available/000-default.conf

    links:
      - dbs:mysql
  dbs:
    image: mysql
    ports:
      - "3307:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=root
    volumes:
      - ./configs/conf.d:/etc/mysql/conf.d
      - /var/mysql:/var/lib/mysql   

docker --version

Docker 版本 17.05.0-ce,内部版本 89658be

docker-compose --version

docker-compose 版本 1.13.0,构建 1719ceb

lsb_release -a

没有可用的 LSB 模块。 分销商 ID:Debian 描述:Debian GNU/Linux 8.10 (jessie) 发布:8.10 代号:杰西

如果我运行以下命令并检查 php 容器上的 /etc/host 我看不到链接(我在执行 docker container --link 时看到)

docker-compose up -d docker exec -it web_1 bash root@web_1> cat /etc/hosts

127.0.0.1 本地主机

::1 localhost ip6-localhost ip6-loopback

fe00::0 ip6-localnet

ff00::0 ip6-mcastprefix

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

172.18.0.3 9c401ea7d031

dbs 容器分配了127.18.0.2 ip 地址,我期待的是上面/etc/hosts 中的这样的东西

127.18.0.2 dbs mysql

我在我的一个 Mac OSX 系统中看到了相同的行为,可能是我做错了什么或遗漏了什么?

【问题讨论】:

  • 您的坐骑可能有问题?这个博客确实帮助我使我的连接正常工作,虽然它是关于 postgres 而不是 mysql:lvthillo.com/…
  • 尝试从 Web 容器 ping "dbs" 或 "mysql"。它们应该只能通过服务名称访问。在我的情况下,我看到我的链接别名虽然不是 /etc/hosts
  • @NiksonKantiPaul 请回答,谢谢提示

标签: docker docker-compose docker-container


【解决方案1】:

容器可以通过 docker-compose 的service-name 访问。 docker-compose 的links 只是此服务名称的别名。它应该可以通过service-namealias-name 从同一网络访问。

在你的情况下:

尝试从web ping 到dbsmysql

【讨论】:

    【解决方案2】:

    旧版容器链接已弃用,并将在未来某个时间从 docker 中删除。手头的问题是您希望您的 Web 容器与您的 db 容器通信。

    解决方案很简单。

    • 使用环境变量动态定义数据库访问 DB_HOST。
    • 在您的应用中加载此环境,如果未定义此变量作为备用值,请使用localhost127.0.0.1

    假设已经完成,您现在可以在您的 compose 上执行此操作...

    您现在可以在 dockerfile 中定义 DB_HOST=dbs

    version: '3.2'
        services:
          web:
              build: .
              image: lap
              volumes:
                 - ./webroot:/var/www/app
                 - ./configs/php.ini:/usr/local/etc/php/php.ini
                 - ./configs/vhost.conf:/etc/apache2/sites-available/000-default.conf
              environment:
                 - DB_HOST=dbs
          dbs:
              image: mysql
              ports:
                 - "3307:3306"
              environment:
                 - MYSQL_ROOT_PASSWORD=root
              volumes:
                 - ./configs/conf.d:/etc/mysql/conf.d
                 - /var/mysql:/var/lib/mysql   
    

    这将解决这个难题。

    【讨论】:

    猜你喜欢
    • 2015-09-11
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 2020-05-11
    • 2016-04-16
    • 2020-03-20
    相关资源
    最近更新 更多