Lamp
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地址發送到enviro中的“web”實體我遵循了 Docker 文件。我當然錯過了重點。我正在向社區尋求幫助。
謝謝你。大衛。
這是因為您正在設置環境變數,
docker-compose.yml
但試圖在建構時(又名RUN env
)引用它們。這些變數僅在建構映像後在ENTRYPOINT
/CMD
命令中可用。您需要在建構時使用中的
ENV
命令設置變數,Dockerfile
或者在容器啟動後使用變數(在您的情況下都可以)。至於在 Web 服務中引用 db,您需要創建一個自定義網路(https://docs.docker.com/compose/compose-file/#/network-configuration-reference>)並設置內部域別名或引用第一個容器到第二個使用服務連結(<https://docs.docker.com/compose/compose-file/#/links)。第二個似乎更適合您的情況,因為 db 服務不需要引用 Web 服務。