Docker-compose-设置不是文字的环境变量

时间:2019-10-30 09:24:27

标签: docker docker-compose

我已经在Docker容器中设置了Jenkins,并且试图通过该服务器访问我的私有Bitbucket存储库。我需要将SSH密钥复制到该容器中,以便Bitbucket能够识别它,然后让Jenkins服务器访问该存储库。

我在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_PRIVATE_KEY的字面意思是/.ssh/id_rsa,而不是内部存储的值。我听说在Dockerfile中执行此操作的问题是它仍然可以在将被推送的图像的一层中查看。

我的问题是如何将SSH_PRIVATE_KEY的值设置为文件内容的值?

我相信这可能是How to set environment variable into docker container using docker-compose的副本,但是该解决方案似乎对我没有任何改变。

2 个答案:

答案 0 :(得分:3)

您可以在运行Shell的shell中创建一个Environment变量:

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"

它应该从docs中指定的shell环境中为容器获取环境变量的值:

  

容器中变量的值取自运行Compose的外壳中同一变量的值。

答案 1 :(得分:1)

可能的解决方案:

mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

并像这样调用docker-compose:

listview = squish.waitForObject(ecusListView) #Returns a QVariant
model = object.convertTo(listview.model,"QObject")
maxcount = listview.count
myarray = []
for i in range(maxcount):
    myarray.append(model.data(model.index(i, 0), 0))

很遗憾,当前无法在 environment: - SSH_PRIVATE_KEY 中使用多行变量。

另一种可能性是:

SSH_PRIVATE_KEY=$(cat ~/.ssh/id_rsa) docker-compose build