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파일에 지정된 환경 변수가 설정되지 않았습니다. 그리고 "db" 엔터티 IP 주소를 "웹" 엔터티로 보내는 방법을 모르겠습니다.

나는 Docker 문서를 따랐습니다. 나는 확실히 요점을 놓쳤습니다. 지역사회에 도움을 요청하고 있습니다.

감사합니다. 데이비드.

답변1

환경 변수를 설정했지만 docker-compose.yml빌드 시간(일명)에서 참조하려고 하기 때문입니다 RUN env. 이러한 변수는 이미지가 빌드된 후에 ENTRYPOINT/ CMD명령에서 사용할 수 있습니다.

ENV의 명령을 사용하여 빌드 시간에 변수를 설정하거나 Dockerfile컨테이너가 시작된 후에 변수를 사용해야 합니다(귀하의 경우 어느 쪽이든 괜찮습니다).

웹 서비스에서 db를 참조하려면 사용자 정의 네트워크(https://docs.docker.com/compose/compose-file/#/network-configuration-reference) 내부 도메인 별칭을 설정하거나 서비스 링크(https://docs.docker.com/compose/compose-file/#/links). db 서비스가 웹 서비스를 참조할 필요가 없기 때문에 두 번째 방법이 귀하의 경우에는 더 적절해 보입니다.

답변2

내가 아는 한 당신은 설정해야

env_file: .env

.env 파일로 실행하려면

그러나 실제로 누락된 점은 docker compose의 ENV 파일을 DOCKERFILE 내에서 사용할 수 없다는 것입니다. Dockerfile은 이미지를 생성합니다. 컨테이너에서 이 이미지를 실행하는 것은 .env 파일이나 그런 것들과 함께 이루어집니다.

  1. 단계 - Docker 이미지 생성:

다음을 사용하여 이미지를 구축하세요.

docker build -t NAMESPACE/NAME .

네임스페이스와 이름을 원하는 대로 바꾸세요.

  1. 단계 - 이미지를 컨테이너로 실행:

그냥 시작하세요 docker-compose. 이제 지정된 ENTRYPOINT/CMD 내에서 envfile을 보고 사용할 수 있습니다.

env 변수를 사용하여 이미지 빌드를 수정할 수 없습니다. 이는 docker가 작동하는 방식이 아닙니다.

바젤의 Codesprint에서 인사드립니다.

바스티안

관련 정보