使用Docker Compose将主机的SSH密钥注入到Docker Machine中

我在Mac OS X上使用Docker机器上的Docker(使用默认的boot2docker机器),并使用docker-compose来设置我的开发环境。

假设其中一个容器被称为“ stack ”。 现在我想要做的就是打电话:

 docker-composer run stack ssh user@stackoverflow.com 

我的公钥(已经被添加到stackoverflow.com ,并将用于validation我)位于主机上。 我希望这个密钥对Docker机器容器可用,这样我就可以使用该容器内的密钥对自己进行身份validation。 最好不要将我的密钥物理复制到Docker Machine。

有没有办法做到这一点? 此外,如果我的密码是密码保护,有没有办法解锁一次,所以每次注射后,我不需要手动input密码?

您可以将其添加到您的docker-compose.yml(假设您的用户在容器内是root):

 volumes: - ~/.ssh:/root/.ssh 

您也可以检查更高级的解决scheme与SSH代理 (我没有尝试过自己)

您可以转发SSH代理:

 something: container_name: something volumes: - $SSH_AUTH_SOCK:/ssh-agent # Forward local machine SSH key to docker environment: SSH_AUTH_SOCK: /ssh-agent 

Docker有一个叫secret的特性,在这里可能会有所帮助。 要使用它,可以将以下代码添加到docker-compose.yml

 --- version: '3.1' # Note the minimum file version for this feature to work services: stack: ... secrets: - host_ssh_key secrets: host_ssh_key: file: ~/.ssh/id_rsa 

然后,新的秘密文件可以像这样在Dockerfile访问:

 RUN mkdir ~/.ssh && ln -s /run/secrets/host_ssh_key ~/.ssh/id_rsa 

秘密文件不会被复制到容器中:

当您授予新创build的或正在运行的服务访问秘密时,解密的秘密将被装入容器中的内存中的文件系统

有关更多详情,请参阅: