将参数从Shell传递到docker-compose / docker

时间:2019-06-25 21:45:56

标签: shell docker docker-compose credentials

我正在尝试使用docker-compose文件从Shell脚本构建docker,并希望将凭据作为参数传递。 (该凭证将在Dockerfile中使用)。例如,在外壳文件中,$ {1}和$ {2}分别是用户名和密码。

在Dockerfile中,如果以下命令显示“用户名”,那么我会很高兴。 为了简单起见,下面的示例为$ {1} =用户名

RUN echo ${test}

在Shell脚本中,由于应使用docker-compose.yml,因此需要使用以下命令。我不想将凭据存储在yml文件中,想通过shell脚本传递。

docker-compose -f docker-compose-el6.yml build --force-rm --pull
docker-compose -f docker-compose-el6.yml up -d --force-recreate
docker-compose -f docker-compose-el6.yml run -T --rm builder-el6 testmain.py

我在下面尝试过,但是没有运气。空白。
1)添加build-arg

docker-compose -f docker-compose-el6.yml build --build-arg test=username --force-rm --pull

出现以下错误

Services are built once and then tagged as `project_service`,
e.g. `composetest_db`. If you change a service's `Dockerfile` or the
contents of its build directory, you can run `docker-compose build` to rebuild it.

Usage: build [options] [SERVICE...]

Options:
    --force-rm  Always remove intermediate containers.
    --no-cache  Do not use cache when building the image.
    --pull      Always attempt to pull a newer version of the image.

2)添加环境变量

$SUDO test=username docker-compose -f docker-compose-el6.yml up -d --force-recreate

3)添加环境变量-另一种方法

export test=username
$SUDO docker-compose -f docker-compose-el6.yml up -d --force-recreate

4)添加环境变量-另一种方法

$SUDO docker-compose -f docker-compose-el6.yml run -T -e test=username --rm builder-el6 testmain.py

有关信息,这是Docker版本信息。

Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d
OS/Arch (client): linux/amd64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 786b29d
OS/Arch (server): linux/amd64

1 个答案:

答案 0 :(得分:0)

  1. 添加build-arg

    -build-arg选项使用一个键和一个值。该命令是 https://docs.docker.com/compose/reference/build/对此进行了说明。正确的命令:

    docker-compose -f docker-compose-el6.yml build --build-arg myArgument=myValue
    

    要在shell上打印参数,请在Dockerfile中添加2行

    ARG myArgument
    RUN echo $myValue
    

    Dockerfile参考在这里进行了解释 https://docs.docker.com/engine/reference/builder/#arg