2016-01-21 80 views
10

我在Mac OS X上使用Docker计算机上的Docker(使用默认的boot2docker计算机),并使用docker-compose来设置我的开发环境。使用Docker Compose将主机的SSH密钥注入到Docker计算机

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

docker-composer run stack ssh [email protected] 

我的公钥(已加入到stackoverflow.com和将被用于验证我的)所在的主机上。我希望此密钥可用于Docker机器容器,以便我可以使用容器内的该密钥对stackoverflow进行身份验证。最好不要将我的密钥物理复制到Docker Machine。

有没有办法做到这一点?另外,如果我的密钥受密码保护,是否有任何方法可以解锁一次,因此每次注射后我都不必手动输入密码?

回答

25

您可以将它添加到您的泊坞窗,compose.yml(假设容器内的用户根目录):

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

你也可以检查more advanced solution with ssh agent(我没有尝试过自己)

+6

注意该解决方案可能会失败,如果你的SSH密钥属于一个用户的主机 –

+1

关于在Mac不工作OSX 10.12.1,docker-compose 1.8 –

+4

虽然您可以在运行时执行此操作,但您将无法在构建时访问该卷。 –

2

您可以转发SSH代理:

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

您已经在这里给出了答案http://stackoverflow.com/a/36648428/228370另外一个注意:这对mac无效@ joe-saw指出,因为unix域套接字没有被代理 – 23tux

1

Docker有一个称为secrets的功能,在这里可以提供帮助。要使用它,人们可以将下面的代码添加到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 

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

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

有关详细信息,请参阅:

+0

嗨astyagun:我同意使用秘密功能是一个很好的方法来解决这个问题,但为了让你的答案更好,包含的基本部分是有用的这里的答案和提供的链接供参考。 –

+0

谢谢。补充的例子 –