Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在运行时将敏感数据发送到docker容器_Docker_Dockerfile_Docker Secrets - Fatal编程技术网

如何在运行时将敏感数据发送到docker容器

如何在运行时将敏感数据发送到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

我正在尝试将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.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 secret而不是docker secret,唯一的区别是它们在静止时不加密,而是直接装载到容器的文件系统中

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 secret而不是docker secret,唯一的区别是它们在静止时不加密,而是直接装载到容器的文件系统中

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运行容器之后