当前位置: 首页 > 面试题库 >

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

吉鸿宝
2023-03-14
问题内容

我在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文件内容的值?

我相信这可能与[如何使用docker-compose将环境变量设置到docker容器中相同,但是该解决方案似乎并没有改变我。


问题答案:

您可以在运行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的外壳中相同变量的值。



 类似资料:
  • 问题内容: 我正在尝试设置一个postgres容器,并希望使用以下命令设置postgres登录名: 所以我像这样创建了docker-compose.yml 我还尝试了将环境变量声明为db部分的其他语法: 但是这些选项似乎都不起作用,因为无论出于什么原因,无论何时我尝试使用各种连接字符串连接到postgres数据库: 与抱怨没有用户数据库相反,它们都给我身份验证失败。 问题答案: 您收到的身份验证错

  • 我在yaml文件中定义了一个环境变量JAVA_TOOL_OPTIONS。当我使用命令“docker compose-f up”启动容器时,我会出现以下错误: 拾取JAVA_TOOL_OPTIONS:-agentlib: jdwp=传输=dt_socket, address=8010, server=y,挂起=n监听传输dt_socketat address: 8010拾取JAVA_TOOL_OPT

  • 这是我的Docker-Compose:

  • 这个码头商。yml: 使用这个。env文件(它位于根文件夹中,如docker-compose.yml和Dockerfile): 和节点服务器启动中的以下代码: 我真的更喜欢使用第一种或第二种方法 docker版本:18.06.1-CE docker-compose版本:1.19.0

  • 问题内容: 使用v2,可以简单地设置环境变量: 完整文件为: 但是,如何转义不是纯字符串的环境变量? 我试过了: 错误:yaml.parser.ParserError:解析“ ./docker-compose.yml”第6行中的块映射时,预期第9列,但在“ ./docker-compose.yml”第6行中找到了“}”。第92栏 问题答案: 环境变量(包括姓名), 有单或双引号内被完全包裹 :或

  • 问题内容: 是否可以重用在多个容器之间共享的环境变量以避免重复,如本示例所示: 问题答案: 该选项可能是好的,但它不支持在撰写文件。其他走的方式是: 扩展名字段(撰写文件3.4+) 如果可以使用3.4+组成文件,则扩展名字段可能是最佳选择: docker-compose.yml env_file指令 docker-compose.yml variables.env * 项目根目录中的 *.env