![](/img/trans.png)
[英]How do I configure a new docker-compose.yml file in an existing WordPress git repository?
[英]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 command
和docker-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.