簡體   English   中英

為什么我需要在 docker-compose.yml 中顯式聲明 env_file?

[英]Why do I need to declare env_file explicitely in docker-compose.yml?

我擴展了 Wordpress 圖像以添加 XDebug、PHPUnit、composer 和 phpcs。

我的項目根目錄如下所示:

docker-wordpress
    Dockerfile
docker-compose.yml
.env

docker-compose.yml:

version: '3.7'

services:
   db:
     image: mysql:5.7
     volumes:
       - ./docker-mysql/db_data:/var/lib/mysql
     restart: always
     ports:
       - "3306:3306"
     env_file: .env

   wordpress:
     depends_on:
       - db
     image: progonkpa/mywordpress
     ports:
       - "80:80"
       - "443:443"
     restart: always
     volumes:
       - ./src:/var/www/html
     env_file: .env

volumes:
    db_data:

此配置有效,但只是因為我明確添加了 env_file 聲明,而我認為 Docker 會自動拾取文件,如果我遵循正確的約定:根目錄中的 .env 文件。

我實際上想刪除 docker-compose.yml 中的 env_file 聲明,但后來我遇到了一些問題。

MySQL 容器日志:

database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD

我似乎在初始化容器時第一次運行時,與 mysql 相關的變量沒有通過。 .env 文件包含通常的 Wordpress 和 MySQL 變量:

MYSQL_DATABASE=wordpress
MYSQL_USER=wordpress
MYSQL_PASSWORD=wordpress
MYSQL_ROOT_PASSWORD=wordpress
WORDPRESS_DB_HOST=db:3306
WORDPRESS_DB_USER=wordpress
WORDPRESS_DB_PASSWORD=wordpress

那么為什么我的變量沒有到達我的容器呢?

Docker-compose 需要明確定義所有內容,將其視為docker run parameter ,它僅在 docker-compose 文件中定義的每個容器上應用這些配置或參數。

因此,如果 ENV 已在 Dockerfile 中聲明,則應避免覆蓋 ENV,這就是您需要為自己明確定義這些配置的原因。

當我們構建 docker 時,我們在 docker-image 中設置了一些默認配置,但是docker run commanddocker-compose提供了覆蓋這些的功能,以便在鏡像作為容器啟動時生效。

服務定義包含應用於為該服務啟動的每個容器的配置,就像將命令行參數傳遞給 docker 容器創建一樣。 同樣,網絡和卷定義類似於 docker 網絡創建和 docker 卷創建。

撰寫文件

env_file

從文件中添加環境變量。 可以是單個值或列表。

如果您使用docker-compose -f FILE指定了 Compose 文件,則env_file中的路徑相對於該文件所在的目錄。

在 environment 部分中聲明的環境變量會覆蓋這些值——即使這些值為空或未定義也是如此。

env_file: .env

這里有兩個地方可以使用變量:在 compose 文件本身內部,以及在docker-compose創建的容器內部。

docker-compose 將使用.env文件來調整docker-compose命令本身的docker-compose 這對於需要擴展的 yaml 文件中的變量或 compose 本身使用的變量很有用。 有關后者的更多信息,請參閱撰寫 CLI 變量文檔

在 yaml 中定義一個env_file將從文件中獲取環境變量並將它們注入容器中。 這使它對您的應用程序可見,但不能用於您希望docker-compose擴展的 yaml 中的變量,因為該變量擴展發生在解析env_file內容之前。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM