Docker容器链接不在env或/ etc / hosts

时间:2016-04-18 23:24:54

标签: docker docker-compose

我有一个(全局)容器在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

1 个答案:

答案 0 :(得分:0)

解决方案是创建一个新的桥接网络,将外部数据库容器连接到此网络,并将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访问。