我试图构build一个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
正如你所看到的,在.env docker-composer.yml或.env文件中都没有指定环境variables。 我不知道如何发送“db”实体IP地址到环境中的“web”实体
我遵循了Docker文档。 我当然错过了这一点。 我正在向社区寻求帮助。
谢谢。 大卫。
这是因为你在docker-compose.yml设置了环境variables,但是试图在docker-compose.yml引用它们(也就是RUN env )。 这些variables只有在图像生成后才能在ENTRYPOINT / CMD命令中使用。
你需要使用Dockerfile的ENV命令在build time中设置variables,或者在容器启动后使用variables(对于你的情况,哪种方法都行)。
至于在Web服务中引用数据库,您需要创build一个自定义networking( https://docs.docker.com/compose/compose-file/#/network-configuration-reference )并设置内部域别名或引用第一个容器到第二个使用服务链接( https://docs.docker.com/compose/compose-file/#/links )。 第二个似乎更适合你的情况,因为数据库服务将不需要引用Web服务。
据我所知你需要设置
env_file: .env
让这个运行.env文件。
但是你真正想要的是,Docker撰写的ENV文件在你的DOCKERFILE文件中是不可用的。 你的Dockerfile创build一个图像,在一个容器中运行这个图像是与你的.env文件或这些东西。
只要build立你的形象:
docker build -t NAMESPACE/NAME .
根据需要replace名称空间和名称。
刚开始docker-compose 。 您现在可以在给定的入口点/ CMD内看到和使用您的环境。
您无法使用envvariables修改图像的构build,这不是docker工作的方式。
我们在巴塞尔的代码印刷的问候,
巴斯蒂安