Mor*_*gan 1 git macos ssh docker docker-compose
我使用的建议,从这个帖子来实现多克的秘密,这样我可以使用本地SSH密钥验证用户访问Github上我的容器。我在MacOS上,没有使用Docker swarm。这是我的设置:
docker-compose.yml
version: '3.1'
services:
[servicename]:
secrets:
- ssh_private_key
[...]
secrets:
ssh_private_key:
file: ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
Docker文件
FROM python:3.7 as intermediate
RUN mkdir /root/.ssh/
RUN ln -s /run/secrets/ssh_private_key /root/.ssh/id_rsa
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts
COPY requirements_private_repos.txt ./
RUN pip install --no-cache-dir -r requirements_private_repos.txt
Run Code Online (Sandbox Code Playgroud)
当我尝试运行docker-compose build
并使用SSH密钥从专用远程存储库中提取信息时,出现以下错误:
Permission denied (publickey).
fatal: Could not read from remote repository.
Run Code Online (Sandbox Code Playgroud)
我能够远程访问docker映像,并看到正在创建并填充秘密/run/secrets/ssh_private_key
。
在Dockerfile中使用链接时,为什么链接不起作用?如果Docker机密不是正确的方法,是否有更好的方法可以将SSH密钥从MacOS共享到Docker?
您不能在构建短语上使用运行时机密。您可以使用多阶段构建将机密复制到映像,以便在下一阶段将其丢弃,也可以使用Docker 18.09中引入的新的构建时机密。
对于多阶段方法,您可以执行以下操作:
FROM python:3.7 as intermediate
COPY id_rsa /root/.ssh/id_rsa # your private key must be on the build context
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts
COPY requirements_private_repos.txt ./
RUN pip install --no-cache-dir -r requirements_private_repos.txt
FROM python:3.7
COPY --from=intermediate XXXX YYYY # copy your modules, this image won't have the ssh private key
Run Code Online (Sandbox Code Playgroud)
对于新方法,您可以执行以下操作,自己还没有尝试过此方法(需要在主机上运行ssh-agent):
FROM python:3.7 as intermediate
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts
COPY requirements_private_repos.txt ./
RUN --mount=type=ssh pip install --no-cache-dir -r requirements_private_repos.txt
Run Code Online (Sandbox Code Playgroud)
然后使用以下方法构建图像:
docker build --ssh default . -t myimage
Run Code Online (Sandbox Code Playgroud)
查看文档以获取有关新方法的更多信息:
归档时间: |
|
查看次数: |
522 次 |
最近记录: |