通常,我的问题是能够在docker-compose构建期间访问ssh密钥。
我在docker-compose.yml文件中使用volume mapping运行docker-compose时能够访问我的ssh键,如下所示:
services:
flask:
volumes:
- ~/.ssh:/root/.ssh
但是我在docker-compose build
期间无法访问它们更多细节
我正在运行一个python烧瓶应用程序。我想安装私有git repo作为pip包。所以我将这一行添加到requirements.txt
git+ssh://git@github.com/username/repo_name.git@branch_name
如果我通过docker-compose run flask bash
在服务中运行bash,那么我可以手动运行pip install git+ssh://git@github.com/username/repo_name.git@branch_name
,这样可行,因为我将卷映射到ssh密钥。
但是当我运行docker-compose build时,它无法访问私有git repo,因为它无法访问ssh密钥。
任何人都知道是否有办法为ssh密钥提供docker-compose构建访问权限,或者解决此问题的其他方法?
答案 0 :(得分:4)
volumes
附加在容器的运行时,而不是构建时。
解决方案:
将.ssh
复制到Dockerfile
旁边,然后在Dockerfile
中执行以下操作:
COPY ./.ssh /root/.ssh
小心:
像这样,您的.ssh目录将可供有权访问您的Docker镜像的所有人使用。因此要么创建一个技术用户并将他的.ssh复制到图像中,或者(更好)做这样的事情:
FROM baseimage AS builder
COPY ./.ssh /root/.ssh
RUN your commands
FROM baseimage
COPY --from=builder some-directory some-directory
修改强> 另一种选择是使用username:password而不是ssh key authentication。这样,您可以在Dockerfile中使用build args,如:
FROM baseimage
ARG GIT_USER
ARG GIT_PASS
RUN git clone http://${GIT_USER}:${GIT_PASS}@your-git-url.git
并使用args docker build --build-args GIT_USER=<user> --build-args GIT_PASS=<pass> .
答案 1 :(得分:-1)
ssh比使用用户名:密码更难设置。这是我添加到requirements.txt的行,它使它工作:
-e git+https://<username>:<password>@github.com/<path to git repo>.git#egg=<package_name>
如果您想获得特定标签,那么您可以这样做:
-e git+https://<username>:<password>@github.com/<path to git repo>.git@<tag_name>#egg=<package_name>
您可以使用任何有权访问git repo的用户名和密码,但出于明显的安全原因,我建议您不要使用主git帐户。专门为此项目创建新用户,并授予他们访问权限。