如何在运行时将敏感数据发送到docker容器
我正在尝试将API自动化repo容器化,以便在ci/cd(gocd)上运行它。下面是如何在运行时将敏感数据发送到docker容器,docker,dockerfile,docker-secrets,Docker,Dockerfile,Docker Secrets,我正在尝试将API自动化repo容器化,以便在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.c
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>
[用户]
用户名=
阿皮基=
[代币]
令牌1=
api_tests.conf
是配置文件,它包含敏感数据,如api密钥、令牌等(注意:配置文件未加密)。目前,我正在将此配置从repo复制到容器中的以下位置/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”
请提供您的输入。如果您想避免将此行
复制api_tests.conf/usr/.ops/config/api_tests.conf
放在dockerfile
中,那么使用docker run
命令的-v
选项将文件/dir从主机装载到容器文件系统中
docker run -itd -v /Users/basavarajlamani/Documents/api_tests.conf:/usr/.ops/config/api_tests.conf image-name
如果要使用复制配置文件
- 确保您正在使用
,因为docker swarm
与docker secret
一起工作swarm orchestrator
- 使用配置文件
docker secret Create api_test.conf/Users/basavarajlamani/Documents/api_tests.conf的内容创建docker secret
将显示创建的机密docker secret ls
- 在swarm中将docker容器作为服务运行
docker run -itd -v /Users/basavarajlamani/Documents/api_tests.conf:/usr/.ops/config/api_tests.conf image-name
希望有帮助。如果您不想在
dockerfile
中使用-v
选项docker run
命令,将文件/dir从主机装载到容器文件系统中
docker run -itd -v /Users/basavarajlamani/Documents/api_tests.conf:/usr/.ops/config/api_tests.conf image-name
如果要使用复制配置文件
- 确保您正在使用
,因为docker swarm
与docker secret
一起工作swarm orchestrator
- 使用配置文件
docker secret Create api_test.conf/Users/basavarajlamani/Documents/api_tests.conf的内容创建docker secret
将显示创建的机密docker secret ls
- 在swarm中将docker容器作为服务运行
docker run -itd -v /Users/basavarajlamani/Documents/api_tests.conf:/usr/.ops/config/api_tests.conf image-name
希望有帮助。我建议您使用环境变量。一种方法是按照建议传递环境变量,第二种方法是将文件从主机装载到容器,第三种方法是在引导期间从S3或某个云中提取time@mchawre谢谢你的建议。我尝试使用--env文件(docker run-it--env文件/Users/basavarajlamani/Documents/api_tests.conf--name api automation docker image api automation),我能够将key=value放入容器中,但我的配置文件有多个部分,每个部分下都有key=value,正如我在初始问题中所述。如何将同一文件从主机复制到容器中?@BasavarajLamani如果您只想复制.conf文件,请使用卷装载选项
docker run-itd-v/Users/BasavarajLamani/Documents/api_tests.conf:/path/to/api_test.conf image name
。如果我能正确解释你的问题,请告诉我。@mchawre非常感谢你的帮助。它回答了我的第一个问题。我建议你使用环境变量。一种方法是按照建议传递环境变量,第二种方法是将文件从主机装载到容器,第三种方法是在引导期间从S3或某个云中提取time@mchawre谢谢你的建议。我尝试使用--env文件(docker run-it--env文件/Users/basavarajlamani/Documents/api_tests.conf--name api automation docker image api automation),我能够将key=value放入容器中,但我的配置文件有多个部分,每个部分下都有key=value,正如我在初始问题中所述。如何将同一文件从主机复制到容器中?@BasavarajLamani如果您只想复制.conf文件,请使用卷装载选项docker run-itd-v/Users/BasavarajLamani/Documents/api_tests.conf:/path/to/api_test.conf image name
。如果我能正确解释你的问题,请告诉我。@mchawre非常感谢你的帮助。它回答了我的第一个问题。我有本地图像,我没有像docker hub那样上传到注册表,但将来我会上传到私有注册表。目前我想在本地进行测试,所以在使用docker服务create--name service api automation--secret source=api_tests.conf,target=/usr/.ops/config/docker my image
运行容器后,我得到以下错误image my image:latest无法在注册表上访问以记录其摘要。每个节点将独立访问我的映像:最新映像,可能会导致不同的节点运行不同版本的映像。
我有本地映像,但我没有像docker hub那样上载到注册表,但将来我会将其上载到private registry。目前我想在本地进行测试,所以在使用docker服务create--name-service-api-automation--secret-source=api_-tests.conf,target=/usr/.ops/config/docker-my-image运行容器之后