Docker Compose は環境変数と関係情報を取得できません

Docker Compose は環境変数と関係情報を取得できません

Apache-PHP + MySQL + PHPMyAdmin エンティティ環境を構築しようとしていますが、成功しません。

私はこれらのファイルを使用してプロジェクトを可能な限りシンプルにします:

test-docker $ ls -la
total 24
drwxrwxr-x  2 david david 4096 janv. 18 11:01 .
drwxrwxr-x 20 david david 4096 janv. 18 10:59 ..
-rw-rw-r--  1 david david  457 janv. 18 11:01 docker-compose.yml
-rw-rw-r--  1 david david   96 janv. 18 11:01 Dockerfile
-rw-rw-r--  1 david david  214 janv. 18 10:59 .env
-rw-rw-r--  1 david david   12 janv. 18 11:00 index.php

各ファイルの内容:

test-docker $ cat Dockerfile
FROM php:7.0-apache

COPY . /var/www/html
WORKDIR /var/www/html

RUN apt-get update \
    && env

test-docker $ cat docker-compose.yml 
version: '2'

services:
  web:
    build: .
    depends_on:
      - db
    restart: always
    environment:
      MYSQL_ADDON_HOST: db

  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: shyrka
      MYSQL_USER: shyrka
      MYSQL_PASSWORD: shyrka

  dbadmin:
    image: phpmyadmin/phpmyadmin
    depends_on:
      - db
    environment:
      PMA_HOST: db
      PMA_PORT: 3306
    restart: always

test-docker $ cat .env 
MYSQL_ADDON_DB=shyrka
MYSQL_ADDON_USER=shyrka
MYSQL_ADDON_PASSWORD=shyrka
MYSQL_ADDON_PORT=3306
MAILER_HOST=smtp.sparkpostmail.com
MAILER_USER=SMTP_Injection
MAILER_PASSWORD=d6ed7a00b2032116ef3aa14789759b959aade6e5

そして結果は次のとおりです。

test-docker $ docker-compose up -d
Creating network "testdocker_default" with the default driver
Building web
Step 1 : FROM php:7.0-apache
 ---> 17c7673c5783
Step 2 : COPY . /var/www/html
 ---> a7987297ae7b
Removing intermediate container a4daf7dbc92a
Step 3 : WORKDIR /var/www/html
 ---> Running in d9b6a5426d83
 ---> ef3d9bb0f0b7
Removing intermediate container d9b6a5426d83
Step 4 : RUN apt-get update     && env
 ---> Running in 6aada591c2a2
Get:1 http://security.debian.org jessie/updates InRelease [63.1 kB]
[...]
Fetched 9856 kB in 2s (4408 kB/s)
Reading package lists...
PHP_EXTRA_CONFIGURE_ARGS=--with-apxs2
APACHE_CONFDIR=/etc/apache2
HOSTNAME=45f28166fed1
PHP_INI_DIR=/usr/local/etc/php
PHP_EXTRA_BUILD_DEPS=apache2-dev
HOME=/root
PHP_LDFLAGS=-Wl,-O1 -Wl,--hash-style=both -pie
PHP_CFLAGS=-fstack-protector-strong -fpic -fpie -O2
PHP_MD5=a51f1d4f03f4e4c745856e9f76fca476
PHP_VERSION=7.0.14
GPG_KEYS=1A4E8B7277C42E53DBA9C7B9BCAA30EA9C0D5763
PHP_CPPFLAGS=-fstack-protector-strong -fpic -fpie -O2
PHP_ASC_URL=https://secure.php.net/get/php-7.0.14.tar.xz.asc/from/this/mirror
PHP_URL=https://secure.php.net/get/php-7.0.14.tar.xz/from/this/mirror
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PHPIZE_DEPS=autoconf        file        g++         gcc         libc-dev        make        pkg-config      re2c
PWD=/var/www/html
PHP_SHA256=0f1dff6392a1cc2ed126b9695f580a2ed77eb09d2c23b41cabfb41e6f27a8c89
APACHE_ENVVARS=/etc/apache2/envvars
 ---> 8c9978981124
Removing intermediate container 6aada591c2a2
Successfully built 8c9978981124
WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating testdocker_db_1
Creating testdocker_web_1
Creating testdocker_dbadmin_1

ご覧のとおり、ファイルで指定された環境変数もdocker-composer.yml設定.envされていません。また、enviroで「db」エンティティのIPアドレスを「web」エンティティに送信する方法がわかりません。

私は Docker のドキュメントに従いました。確かに要点が抜けていました。コミュニティに助けを求めています。

ありがとう。デイビッド。

答え1

これは、環境変数を で設定しているが、docker-compose.ymlビルド時 (別名 ) にそれらを参照しようとしているためです。これらの変数は、イメージがビルドされた後、 /コマンドRUN envでのみ使用できます。ENTRYPOINTCMD

ビルド時にENVコマンドを使用して変数を設定するかDockerfile、コンテナの起動後に変数を使用する必要があります (どちらの方法でも問題ありません)。

WebサービスでDBを参照するには、カスタムネットワーク(https://docs.docker.com/compose/compose-file/#/ネットワーク構成リファレンス) を設定し、内部ドメインエイリアスを設定するか、サービスリンクを使用して最初のコンテナを2番目のコンテナに参照します (https://docs.docker.com/compose/compose-file/#/links)。db サービスは Web サービスを参照する必要がないため、2 番目の方法の方が適切と思われます。

答え2

私の知る限りでは、設定する必要があるのは

env_file: .env

これを .env ファイルで実行します。

しかし、本当に見逃しているのは、docker compose の ENV ファイルが DOCKERFILE 内で使用できないことです。Dockerfile はイメージを作成し、このイメージをコンテナー内で実行するには .env ファイルなどを使用します。

  1. 手順 - Docker イメージを作成する:

次のようにイメージをビルドするだけです:

docker build -t NAMESPACE/NAME .

必要に応じて、名前空間と名前を置き換えます。

  1. 手順 - イメージをコンテナーとして実行する:

起動するだけですdocker-compose。これで、指定された ENTRYPOINT / CMD 内で envfiles を表示および使用できるようになります。

環境変数を使用してイメージのビルドを変更することはできません。これは Docker の動作方法ではありません。

バーゼルのコードスプリントからのご挨拶です。

バスティアン

関連情報