运行 docker compose 时出现“密钥不能包含空格”错误

xis*_*10z 22 yaml djangoappengine docker dockerfile docker-compose

我正在尝试使用 dockerfile 将我的 django 应用程序部署到应用程序引擎,为此,在阅读了一些博客(例如这些)之后,我创建了一个 docker-compose.yml 文件,但是当我运行命令时docker compose updocker-compose -f docker-compose-deploy.yml run --rm gcloud sh -c "gcloud app deploy"我收到了错误key cannot contain a space。见下文:

例如:

$ docker compose up

key cannot contain a space
Run Code Online (Sandbox Code Playgroud)
$ cat docker-compose.yml 

version: '3.7'

services:
  app:
    build:
      context: .
    ports: ['8000:8000']
    volumes: ['./app:/app']
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个错误吗?我已尝试 yamllint 验证 yaml 文件是否存在任何空格/缩进类型的错误,并且它没有向我显示任何错误。

编辑:这是较长命令中文件的内容:

version: '3.7'

services:
  gcloud:
    image: google/cloud-sdk:338.0.0
    volumes:
      - gcp-creds:/creds
      - .:/app
    working_dir: /app
    environment:
      - CLOUDSDK_CONFIG=/creds

volumes:
  gcp-creds:
Run Code Online (Sandbox Code Playgroud)

xis*_*10z 31

好的,这件事终于解决了!经过一番绞尽脑汁,我最终通过执行以下操作解决了这个问题:

  1. 从我的 Docker 桌面设置中取消选中使用“Docker Compose v2”的选项。这是 Docker Desktop 中的设置

  2. 关闭 docker 桌面应用程序并重新启动它。

如果您遇到问题,请尝试这些步骤。谢谢!


小智 30

只是在此处添加另一个替代答案,我确认在执行上述步骤时对我有用,但没有。我的情况略有不同,但当谷歌首先把我带到这里时,我想我应该留下一张便条。

检查您的环境变量值是否有空格!

这可能仅适用于您使用env_var文件的情况(请注意 OP 不在最小示例中,因此说这是不同的)。变量中未转义的空格将导致此神秘的错误消息。

因此,给定一个如下所示的撰写文件:

version: '3.7'

services:
  gcloud:
    image: google/cloud-sdk:338.0.0
    volumes:
      - gcp-creds:/creds
      - .:/app
    working_dir: /app
    env_file:
      - some_env_file.env
Run Code Online (Sandbox Code Playgroud)

如果some_env_file.env看起来像这样:

MY_VAR=some string with spaces
Run Code Online (Sandbox Code Playgroud)

然后我们得到密钥不能包含空格

如果我们改为some_env_file.env这样:

MY_VAR="some string with spaces"
Run Code Online (Sandbox Code Playgroud)

那么一切都很好。

该问题已报告给 docker-compose

谷歌首先把我带到这里,遗憾的是,当你的建议对我不起作用时,它就把我带到了这个 reddit 线程,在那里我发现了上述内容。

  • 这是正确的答案!我猜想在 docker-compose v2 和 v1 之间,他们开始检查 .env 文件中的值格式 (2认同)