14

我正在尝试使用 dockerfile 将我的 django 应用程序部署到应用程序引擎,为此,在关注了一些诸如此类的博客之后我创建了一个 docker-compose.yml 文件,但是当我运行该docker compose up命令或docker-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
$ cat docker-compose.yml 

version: '3.7'

services:
  app:
    build:
      context: .
    ports: ['8000:8000']
    volumes: ['./app:/app']

有人可以帮我解决这个错误吗?我已经尝试 yamlint 来验证 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:
4

4 回答 4

27

好的,这终于解决了!在打了我的头之后,我终于能够通过执行以下操作来解决这个问题:

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

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

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

于 2021-10-10T19:51:42.433 回答
15

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

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

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

因此,给定这样的 compose 文件:

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

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

MY_VAR=some string with spaces

那么我们得到的密钥不能包含空格

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

MY_VAR="some string with spaces"

那么一切都很好。

该问题已报告给 docker-compose

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

于 2021-10-19T14:09:36.140 回答
1

Docker Compose(至少从 v2 开始).env会在处理文件之前自动解析文件docker-compose.yml,而不管env_fileyaml 文件中的任何设置。如果.env文件中的任何变量包含空格,那么您将收到错误消息key cannot contain a space

目前有两种解决方法:

  1. 将您的.env文件重命名为其他名称,或
  2. 创建一个备用/空.env文件,例如.env.docker,然后显式设置--env-file参数,即docker compose --env-file .env.docker config.

在此处跟踪相关问题:

  1. https://github.com/docker/compose/issues/6741
  2. https://github.com/docker/compose/issues/8736
  3. https://github.com/docker/compose/issues/6951
  4. https://github.com/docker/compose/issues/4642
  5. https://github.com/docker/compose/commit/ed18cefc040f66bb7f5f5c9f7b141cbd3afbbc89
  6. https://docs.docker.com/compose/env-file/
于 2021-12-06T08:55:08.840 回答
0

还有一件事需要注意 - 自 Compose V2 以来,如果您在 Compose 使用的 env 文件中有内联注释,则可能会引发此错误。例如

---
version: "3.7"

services:
  backend:
    build:
      context: .
      dockerfile: Dockerfile
    env_file: .app.env

就是.app.env这样

RABBIT_USER=user  # RabbitMQ user

可能会出现同样的错误。要修复只需将评论移动到自己的行

# RabbitMQ user
RABBIT_USER=user
于 2021-11-26T10:38:20.447 回答