如何在运行期间将敏感数据发送到Docker容器

时间:2019-07-15 10:49:48

标签: docker dockerfile docker-secrets

我正在尝试将API自动化存储库容器化以在ci / cd(gocd)上运行它。以下是Dockerfile的内容。

FROM alpine:latest

RUN apk add --no-cache python3 \
    && pip3 install --upgrade pip

WORKDIR /api-automation

COPY . /api-automation

RUN pip --no-cache-dir install .

COPY api_tests.conf /usr/.ops/config/api_tests.conf

ENTRYPOINT ["pytest" "-s" "-v" "--cache-clear" "--html=report.html"]

下面是api_tests.conf配置文件的内容。

[user]
username=<user_name>
apikey=<api_key>

[tokens]
token1=<token1>

api_tests.conf是配置文件,它具有敏感数据,例如API密钥,令牌等(注意:配置文件未加密)。目前,我正在将此配置从存储库复制到容器中的以下位置/usr/.ops/config/api_tests.conf,但由于安全方面的考虑,我不想这样做。因此,当我从ci / cd机器上运行容器时,如何复制api_tests.conf文件(这意味着,从Dockerfile中,我需要删除指令COPY api_tests.conf /usr/.ops/config/api_tests.conf)。

我的第二个问题是 如果我使用命令docker secret create my_secret file_path创建一个秘密文件,那么在运行容器时如何复制这个秘密api_tests.conf文件。

注意:将api_tests.conf文件复制到容器后,我需要运行命令“ pytest -s -v --cache-clear --html = report.html”

请提供您的输入。

1 个答案:

答案 0 :(得分:2)

如果要避免将COPY api_tests.conf /usr/.ops/config/api_tests.conf行放在dockerfile中,请使用-v命令的docker run选项,该命令将从主机将文件/目录装入容器文件系统。

docker run -itd -v /Users/basavarajlamani/Documents/api_tests.conf:/usr/.ops/config/api_tests.conf image-name

如果您想使用docker secret复制配置文件

  • 请确保您正在使用docker swarm,因为docker secretswarm orchestrator一起使用。
  • 使用配置文件docker secret create api_test.conf /Users/basavarajlamani/Documents/api_tests.conf的内容创建docker secret
  • docker secret ls将显示创建的机密。
  • 将docker容器作为服务在swarm中运行。
docker service create \
     --name myservice \
     --secret source=api_test.conf,target=/usr/.ops/config/api_tests.conf \
     image-name

注意::您还可以使用docker config而不是docker secret,唯一的区别是它们不会在静态加密,而是直接安装在容器的文件系统中。

希望有帮助。