我如何使用bash将环境传递给docker?

时间:2014-01-16 00:32:25

标签: bash docker

以下在docker中工作正常:

docker run -i -t -rm -e a="hello world" b=world ubuntu /bin/bash

它的作用是将值为“hello world”的env var a和值为“world”的env var b传递到docker容器中。

事情是,我需要从脚本中生成它。

这对于没有空间的env变速器非常容易:

ENV_VARS='-e a=helloworld b=world'
docker run -i -t -rm $ENV_VARS ubuntu /bin/bash

但是,一旦env var中有空格,我就会被冲洗:

ENV_VARS='-e a="hello world" b=world'
docker run -i -t -rm $ENV_VARS ubuntu /bin/bash

Unable to find image 'world"' (tag: latest) locally
2014/01/15 16:28:40 Invalid repository name (world"), only [a-z0-9-_.] are allowed

如何让上述示例正常工作?我也尝试了数组,但无法让它们工作。

4 个答案:

答案 0 :(得分:11)

Bash数组旨在解决这类问题

第一步是声明数组:

docker_env=(-e "a=hello world" "b=world")

它允许您以编程方式填充更多环境变量,例如:

docker_env+=("c=foo bar")

最后运行它:

docker run -i -t -rm "${docker_env[@]}" ubuntu /bin/bash

答案 1 :(得分:2)

相反如何:

a='hello world'
b='some more'
docker run -i -t -rm -e a -e b ...

这是否能以eaiser方式满足您的需求?

答案 2 :(得分:1)

eval docker run -i -t -rm "$ENV_VARS" ubuntu /bin/bash

答案 3 :(得分:0)

我使用选项--env-file解决了包含传递给docker环境的变量的空间问题。在env文件中,需要行分隔的变量定义。以下示例说明了模式。

DOCKER_ENV=$(mktemp run-docker-env.XXXXXXX)
echo Using env file: $DOCKER_ENV
echo VAR1=$VARZZZ > $DOCKER_ENV
echo VAR2=value >> $DOCKER_ENV
echo VAR_WITH_SPACE=variable value with space >> $DOCKER_ENV

docker run --env-file=${DOCKER_ENV} image:latest

rm $DOCKER_ENV