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

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

我开始这样的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()中的环境variables

 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 

解决scheme是创build一个新的桥接networking,将外部数据库容器连接到这个networking,并将fpm容器添加到同一个networking。

 $ 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内的所有其他容器连接到的默认networking。 我不得不添加它,否则fpm只能与数据库交谈。 数据库容器可以作为dbdb.dbnetwork访问。