使用环境变量将SSH密钥发送到Docker中不起作用

时间:2019-05-05 21:59:53

标签: docker ssh docker-compose dockerfile ssh-keys

我正在尝试在我的docker文件中安装一些私人gems(bitbucket git repo),并且SSH权限被拒绝

我所做的是:

  1. 将我的私钥设置为“ ssh_key”环境变量
  2. 将“ ssh_config”环境变量设置为“ IdentityFile /.ssh/id_rsa主机用户”
  3. 在docker-compose中:
    args:
            ssh_key: ${ssh_key}
            ssh_config: ${ssh_config}

  1. 在Dockerfile中:
    ARG ssh_key
    ARG ssh_config
    RUN mkdir /.sshRUN echo "${ssh_key}" > /.ssh/id_rsa
    RUN echo "${ssh_config}" > /etc/ssh/ssh_config
    RUN chmod 600 /.ssh/id_rsa
    bundle install

我得到了错误

fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

但是当我注释掉私人gem并构建图像时,将ssh放入容器中,删除id_rsa文件,然后使用文本编辑器手动粘贴主机私钥并运行chmod 600(或者只是挂载我的主机〜/ .ssh dir),那么便可以安装私有gem了。

我不知道是什么导致了错误。有没有更简单的方法可以做到这一点?

谢谢

1 个答案:

答案 0 :(得分:1)

如果在运行docker build之前先在主机上运行bundle package,则将拥有安装应用程序所需的所有gem文件的本地副本。然后,bundle install --local选项将使用本地目录,而不是尝试远程获取文件。您的Dockerfile可能看起来像部分

COPY Gemfile Gemfile.lock .
COPY vendor/cache vendor/cache
RUN bundle install --frozen --local --system

这避免了您尝试使用ssh密钥进行的危险舞蹈:拥有图像的任何人都可以查看其docker history或只运行容器并轻松获取ssh私钥。