docker-compose 不使用 -f 选项检测 .env 文件

docker-compose doesn't detect .env file with -f option

我正在使用 makefile 构建我的项目,这是我的文件层次结构:

➜  Inception git:(main) ✗ ls -l *
-rw-r--r-- 1 dcavalei dcavalei  258 Jan  6 16:34 Makefile

srcs:
total 28
drwxr-xr-x 5 dcavalei dcavalei 4096 Jan  6 11:45 .
drwxr-xr-x 7 dcavalei dcavalei 4096 Jan  6 17:21 ..
-rw-r--r-- 1 dcavalei dcavalei  631 Jan  6 17:02 docker-compose.yml
-rw-r--r-- 1 dcavalei dcavalei  123 Jan  6 15:49 .env
drwxr-xr-x 3 dcavalei dcavalei 4096 Jan  6 11:23 mariadb
drwxr-xr-x 2 dcavalei dcavalei 4096 Jan  6 11:45 nginx
drwxr-xr-x 2 dcavalei dcavalei 4096 Jan  5 15:21 wordpress

基本上当我在 srcs 目录中键入 docker-compose up 时,它会按预期工作,但是 如果我尝试:

我收到以下警告:

➜  Inception git:(main) ✗ docker-compose -f ./srcs/docker-compose.yml up
WARNING: The MYSQL_ROOT_PASSWORD variable is not set. Defaulting to a blank string.
WARNING: The MYSQL_USER variable is not set. Defaulting to a blank string.
WARNING: The MYSQL_PASSWORD variable is not set. Defaulting to a blank string.
WARNING: The MYSQL_WP_NAME variable is not set. Defaulting to a blank string.

在一些旧的 docker-compose 中,例如docker-compose version 1.24.0, build 0aa59064。撰写将 project-directory 设置为 运行 docker-compose 的当前文件夹。行为更改开始 +v1.28.

所以,对于你来说,你有3个选项,你可以选择任何一个。

  1. docker-compose 升级到 +v1.28 或最新版本。

  2. 移动 .env 到您 运行 docker-compose

    的文件夹
  3. 使用--project-directory强制使用备用工作目录,如下所示:

docker/docker-compose.yaml:

version: "3"

services:
  web:
    image: "webapp:${TAG}"

docker/.env:

TAG=3

执行:

$ ls
docker
$ docker-compose --project-directory docker -f docker/docker-compose.yaml config
services:
  web:
    image: webapp:3
version: '3.0'