【问题标题】:Docker container link not in env or /etc/hostsDocker 容器链接不在 env 或 /etc/hosts 中
【发布时间】:2016-04-21 01:33:50
【问题描述】:

我在 docker-compose.yml 中有一个运行 mariadb 的(全局)容器和一个 php-fpm 容器。它们是链接的,但是db容器的ip和端口不在php-fpm的环境变量中。

我是这样启动 mariadb 容器的:

$ docker run --name db -e MYSQL_ROOT_PASSWORD=.... -dP mariadb

我的 docker-compose.yml 看起来像这样:

version: "2"
services:
  nginx:
    build:
      context: .
      dockerfile: docker/nginx/Dockerfile
    ports:
      - 80
    links:
      - fpm
    volumes_from:
      - app
  fpm:
    build:
      context: .
      dockerfile: docker/fpm/Dockerfile
    external_links:
      - db
    volumes_from:
      - app
  app:
    build:
      context: .
      dockerfile: docker/app/Dockerfile
    volumes:
#      - /app
      - .:/app:ro

我的 fpm Dockerfile:

FROM php:fpm

RUN docker-php-ext-install pdo pdo_mysql

phpinfo()中的环境变量

PATH    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME    db14e2928ed6
PHP_INI_DIR /usr/local/etc/php
PHP_EXTRA_CONFIGURE_ARGS    --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data
GPG_KEYS    1A4E8B7277C42E53DBA9C7B9BCAA30EA9C0D5763
PHP_VERSION 7.0.5
PHP_FILENAME    php-7.0.5.tar.xz
PHP_SHA256  c41f1a03c24119c0dd9b741cdb67880486e64349fc33527767f6dc28d3803abb
HOME    /var/www
USER    www-data

编辑:

我尝试链接到一个 ubuntu 容器以确保 php-fpm 不会出错。它作为一个临时容器工作,但是当我将它作为 external_link 放在 docker-compose.yaml 中时,它也会从 env 和 /etc/hosts 中消失。

version: "2"
services:
  test:
    image: ubuntu
    external_links:
      - db

【问题讨论】:

  • 参考说明“注意:如果您使用的是版本 2 文件格式,则外部创建的容器必须连接到至少一个与链接到它们的服务相同的网络。 "
  • 版本 2 撰写文件使用用户定义的网络,不再使用 /etc/hosts。有一个嵌入式 DNS 服务器来处理名称解析。
  • 如何使用嵌入式 DNS 服务器访问 db?我无法解决db ($ netcat db 3306 nc: getaddrinfo: Name or service not known)
  • @dnephin 如果你能分享回答这个问题,那就太好了。

标签: docker docker-compose


【解决方案1】:

解决方案是创建一个新的桥接网络,将外部数据库容器连接到该网络,并将 fpm 容器添加到同一网络。

$ docker network create -d bridge dbnetwork
$ docker network connect dbnetwork db

还有 docker-compose.yml:

version: "2"
services:
  nginx:
    build:
      context: .
      dockerfile: docker/nginx/Dockerfile
    ports:
      - 80
    links:
      - fpm
    volumes_from:
      - app
  fpm:
    build:
      context: .
      dockerfile: docker/fpm/Dockerfile
    external_links:
      - db
    volumes_from:
      - app
    networks:
      - default
      - dbnetwork
  app:
    build:
      context: .
      dockerfile: docker/app/Dockerfile
    volumes:
      - .:/app:ro
networks:
  dbnetwork:
    external: true

default 是 docker-compose.yml 中的所有其他容器都连接到的默认网络。我必须添加它,否则fpm 只能与数据库对话。可以通过dbdb.dbnetwork 访问数据库容器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    相关资源
    最近更新 更多