Docker compose-设置非文本的环境变量
我已经在Docker容器中设置了Jenkins,我正在尝试使用该服务器访问我的私有Bitbucket repo。我需要将我的SSH密钥复制到该容器中,以便Bitbucket能够识别它,然后我可以让我的Jenkins服务器访问repo 我的docker-compose.yml文件中包含以下内容:Docker compose-设置非文本的环境变量,docker,docker-compose,Docker,Docker Compose,我已经在Docker容器中设置了Jenkins,我正在尝试使用该服务器访问我的私有Bitbucket repo。我需要将我的SSH密钥复制到该容器中,以便Bitbucket能够识别它,然后我可以让我的Jenkins服务器访问repo 我的docker-compose.yml文件中包含以下内容: services: jenkins: build: . volumes: - jenkins-data:/var/jenkins_home environment:
services:
jenkins:
build: .
volumes:
- jenkins-data:/var/jenkins_home
environment:
- SSH_PRIVATE_KEY=$(cat ~/.ssh/id_rsa)
ports:
- "8080:8080"
- "50000:50000"
volumes:
jenkins-data:
但是,echo$SSH\u PRIVATE\u KEY
给出的是/.SSH/id\u rsa
,而不是存储在里面的值。我听说在Dockerfile中执行此操作的问题在于,它仍然可以在将被推送的图像的某个层中查看
我的问题是如何将SSH\u PRIVATE\u KEY
的值设置为文件内容的值
我相信这可能是一个副本,但该解决方案对我来说似乎没有任何改变。可能的解决方案:
environment:
- SSH_PRIVATE_KEY
然后像这样调用docker compose:
SSH\u PRIVATE\u KEY=$(cat~/.SSH/id\u rsa)docker编写版本
不幸的是,目前无法在.env
中使用多行变量
另一种可能性是:
services:
jenkins:
build: .
volumes:
- jenkins-data:/var/jenkins_home
- "/home/user/.ssh/id_rsa:/home/user/.ssh/id_rsa:ro"
ports:
- "8080:8080"
- "50000:50000"
volumes:
jenkins-data:
您可以在shell中创建一个环境变量,从中运行compose:
export SSH_PRIVATE_KEY=$(cat ~/.ssh/id_rsa)
然后在写作中使用它,如:
services:
jenkins:
build: .
volumes:
- jenkins-data:/var/jenkins_home
environment:
- SSH_PRIVATE_KEY
ports:
- "8080:8080"
- "50000:50000"
它应该从shell环境中获取容器的环境变量值,如中所指定:
容器中变量的值取自运行Compose的shell中相同变量的值
它应该可以工作,但是您可以ommit
${SSH\u PRIVATE\u KEY}
,因为docker compose可以从具有相同名称的本地环境中选择值(如我的回答所示)。无论如何+1.true,我总是把它放在那里,因为我经常根据图像使用不同的变量名和默认值。在这种情况下我删除了它。我想知道如何将容器中的SSH_PRIVATE_KEY值用作私钥?@adii使用jenkins从容器环境中获取私钥。啊,谢谢@michalk,我刚刚测试了它,效果很好!然而,我现在意识到,我所想的不会起作用,因为我需要在图像构建期间使用它,而当前的值只是在之后分配。我将尝试将其作为build arg传递,看看这是否适用于me@Adiii我没有将该插件用作容器,而是尝试在Dockerfile中创建一个多阶段构建,因为我担心否则会泄漏SSH密钥。