在docker-compose build flask项目中访问ssh密钥
一般来说,我的问题是关于在docker-compose构build期间能够访问ssh密钥。
在Docker-compose.yml文件中使用卷映射运行docker-compose时,我可以访问我的ssh密钥,如下所示:
services: flask: volumes: - ~/.ssh:/root/.ssh
但是在docker-compose构build中我无法访问它们
更具体的
我正在运行一个python烧瓶应用程序。 我想安装一个私人的git回购作为一个点子包。 所以我将这一行添加到requirements.txt
git+ssh://git@github.com/username/repo_name.git@branch_name
如果我通过docker-compose run flask bash
在服务中docker-compose run flask bash
那么我可以手动运行pip install git+ssh://git@github.com/username/repo_name.git@branch_name
,那可以,因为我有卷映射到ssh密钥。
但是当我运行docker-compose build时,它不能访问私有的git repo,因为它没有权限访问ssh密钥。
任何人都知道是否有一种方法来给docker-compose编译访问ssh密钥,或者解决这个问题的另一种方法?
volumes
在运行时连接到容器,而不是在构build时 。
解:
将你的.ssh
复制到Dockerfile
旁边,在Dockerfile
执行以下Dockerfile
:
COPY ./.ssh /root/.ssh
小心:
像这样,您的.ssh目录将可用于有权访问您的Docker映像的所有人。 因此,要么创build一个技术用户,并将他的.ssh复制到图像中,或者(更好地)执行如下操作:
FROM baseimage AS builder COPY ./.ssh /root/.ssh RUN your commands FROM baseimage COPY --from=builder some-directory some-directory
编辑:另一个select是使用用户名:密码,而不是ssh密钥authentication。 这样,你可以在Dockerfile中使用构build参数,如下所示:
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> .
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仓库的用户名和密码,但是我build议你不要使用主要的git账户,这是出于安全原因。 创build一个新的用户专门为这个项目,并授予他们访问权限。
- 是否有可能从正在运行的Docker容器中发送HTTP请求
- requirements.txt中的依赖关系未安装
- 从Docker容器暴露WSGI应用程序
- 无法访问在Docker容器内运行的Flask Web应用程序
- 无法在Docker中构build图像
- docker-compose不能用flask来设置环境variables
- 用EBS部署多容器docker环境(flask&nginx)
- 为什么Docker容器的图片变得如此庞大,同时在UBUNTU 16.04上倚靠python3.6,Virtualenv,Flask,Gunicorn
- 应用程序移至docker工生产环境时,Flask-WTF CSRFvalidation失败