Docker compose:服务中“环境”选项的插值格式无效

Bak*_*aku 31 docker docker-compose

嗨在 docker compose 我有:

 environment:
      - AWS_ACCESS_KEY_ID=$(aws --profile default configure get aws_access_key_id)
      - AWS_SECRET_ACCESS_KEY=$(aws --profile default configure get aws_secret_access_key)
Run Code Online (Sandbox Code Playgroud)

但它返回给我一个类似主题的错误。任何人都知道如何传递这些变量?

谢谢

小智 30

对于在尝试传递 DJANGO 密钥时遇到此错误的任何人,如果您的密钥包含“$”,请在其后添加另一个“$”

DJANGO_SECRET_KEY: "tj...........t2$8" # Original Key
DJANGO_SECRET_KEY: "tj...........t2$$8"
Run Code Online (Sandbox Code Playgroud)


Nic*_*Ben 8

尝试使用 ENV 文件。

$ cat ./Docker/api/api.env
NODE_ENV=test

$ cat docker-compose.yml
version: '3'
services:
  api:
    image: 'node:6-alpine'
    env_file:
     - ./Docker/api/api.env
    environment:
     - NODE_ENV=production
Run Code Online (Sandbox Code Playgroud)

你可以用另一个 $ [像这样 $$() ] 转义 $ 符号参考:https : //docs.docker.com/compose/environment-variables/#the-env-file


Fan*_*mX1 8

我的问题是由以下事实引起的:我一直在使用 docker-file 的 v2,而这样的环境选项需要在标头版本 3(而不是 2)中定义

version: "3"


Tom*_*rmi 8

如果您使用冒号来定义默认值,则需要使用减号。
所以而不是:

ENV_VAR=${ENV_VAR:100}
Run Code Online (Sandbox Code Playgroud)

你想使用:

ENV_VAR=${ENV_VAR:-100}
Run Code Online (Sandbox Code Playgroud)


fly*_*rix 7

如果 aws 命令行实用程序嵌入在容器中,那么您可以像这样重写命令。

environment:
  - AWS_ACCESS_KEY_ID=$$(aws --profile default configure get aws_access_key_id)
  - AWS_SECRET_ACCESS_KEY=$$(aws --profile default configure get aws_secret_access_key)
Run Code Online (Sandbox Code Playgroud)


如果这个aws实用程序在主机系统上,那么
你可以在你的 shell 上设置一些环境变量,比如(.profile 或 .bashrc 等)

export HOST_ACCESS_KEY_ID=$(aws --profile default configure get aws_access_key_id)
export HOST_AWS_SECRET_ACCESS_KEY=$(aws --profile default configure get aws_secret_access_key)
Run Code Online (Sandbox Code Playgroud)


然后在 docker-compose.yml 中重用它,就像

environment:
  - AWS_ACCESS_KEY_ID=${HOST_ACCESS_KEY_ID}
  - AWS_SECRET_ACCESS_KEY=${HOST_AWS_SECRET_ACCESS_KEY}
Run Code Online (Sandbox Code Playgroud)