Docker compose-设置非文本的环境变量

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:

我已经在Docker容器中设置了Jenkins,我正在尝试使用该服务器访问我的私有Bitbucket repo。我需要将我的SSH密钥复制到该容器中,以便Bitbucket能够识别它,然后我可以让我的Jenkins服务器访问repo

我的docker-compose.yml文件中包含以下内容:

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密钥。