我有一个应用程序,使用Git执行各种有趣的东西(如运行git clone和git push),我正在尝试停靠它.
我遇到了一个问题,虽然我需要能够在容器中添加SSH密钥以供容器"用户"使用.
我尝试将其复制/root/.ssh/
,更改$HOME
,创建一个git ssh包装器,但仍然没有运气.
这是Dockerfile供参考:
#DOCKER-VERSION 0.3.4
from ubuntu:12.04
RUN apt-get update
RUN apt-get install python-software-properties python g++ make git-core openssh-server -y
RUN add-apt-repository ppa:chris-lea/node.js
RUN echo "deb http://archive.ubuntu.com/ubuntu precise universe" >> /etc/apt/sources.list
RUN apt-get update
RUN apt-get install nodejs -y
ADD . /src
ADD ../../home/ubuntu/.ssh/id_rsa /root/.ssh/id_rsa
RUN cd /src; npm install
EXPOSE 808:808
CMD [ "node", "/src/app.js"]
Run Code Online (Sandbox Code Playgroud)
app.js
像git一样运行git命令 git pull
我不知道如何将外部机密传递给docker-compose产生的服务。我执行以下操作:
我创造新的秘密
printf "some secret value goes here" | docker secret create wallet_password -
Run Code Online (Sandbox Code Playgroud)
我的docker-compose.yml:
version: "3.4"
services:
test:
image: alpine
command: 'cat /run/secrets/wallet_password'
secrets:
- wallet_password
secrets:
wallet_password:
external: true
Run Code Online (Sandbox Code Playgroud)
然后我运行:
docker-compose -f services/debug/docker-compose.yml up -d --build
Run Code Online (Sandbox Code Playgroud)
和
docker-compose -f services/debug/docker-compose.yml up
Run Code Online (Sandbox Code Playgroud)
我得到以下回应:
WARNING: Service "test" uses secret "wallet_password" which is external. External secrets are not available to containers created by docker-compose.
WARNING: The Docker Engine you're using is running in swarm mode.
Compose does not use swarm mode …
Run Code Online (Sandbox Code Playgroud) 我们有一个工具,需要克隆几个Git存储库以汇总文档数据。我们希望将该工具放在Docker容器中,以便在本地和Jenkins轻松运行它,并实现可重复性。
Git存储库托管在需要使用SSH密钥进行身份验证的专用服务器上。因此,Docker容器必须以某种方式获得对运行该容器的用户的SSH密钥的访问权限。
我们有一个约束列表:
Dockerfile
不会启用可重现性,而已经生成的Docker映像可以root
用户身份运行-v
,-u
,...)问题:如果可能的话,我们如何实现?
有关:
root
)我在github上问了同样的问题,但没有回复。所以,我认为这里可能是提出此类编码问题的更好地方,因为这是我尝试做一些编码工作时遇到的问题。
我想在运行 macOS 10.14.x 的 MacBook Pro 上使用 docker 设置气流。
我有 zpencerq/docker-airflow:1.10.2 并按照https://docs.docker.com/compose/install/#install-compose上的说明进行操作
另外,我已经按照https://github.com/uber-common/docker-ssh-agent-forward中的说明设置了 ssh 代理转发
当我跑步时:
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
我有:
Collecting my-data-store from git+ssh://git@github.com/my-data-store.git@v.xx.xx.x#egg=my-data-store
Cloning ssh://git@github.com/my-data-store.git to /my/local/path
Permission denied (publickey).
fatal: Could not read from remote repository.
Run Code Online (Sandbox Code Playgroud)
我已经创建了 ssh 公钥并将 ssh 公钥添加到我的 git 配置文件中。我还添加了我的私钥。
我已经尝试过针对此类问题的一些答案,但没有一个有效。
如果我在 Mac 终端中运行以下命令,效果很好。
git clone -q ssh://git@github.com/my_path/my-data-store.git /tmp/my_folder
Run Code Online (Sandbox Code Playgroud)
为什么 docker-compose 不能做同样的事情来访问 github ?
我错过了什么吗?
我正在使用 DigitalOcean,特别是 1-click Docker droplet。
Docker 在 droplet 上运行,socket 文件位于 droplet 上的 /var/run/docker.sock 。
我的机器上也本地安装了 docker 和 docker-compose。
我有一个在我的机器上本地运行的 docker-compose.yml。
我在 droplet 上有公钥,在我的本地机器上将私钥添加到 ssh-add。我的 ssh 密钥有密码。
我可以从我的本地机器 ssh 进入我的 DigitalOcean droplet,没有任何问题或密码提示。
端口 22 在液滴上打开。
编辑:两台机器上的 docker-compose > 1.28
鉴于这些事实,根据我阅读的所有教程和文档,这应该有效:
docker-compose -H "ssh://root@<my-digital-ocean-droplet-ip-here>" up -d
Run Code Online (Sandbox Code Playgroud)
但它不起作用。我明白了:
ssh: connect to host <my-digital-ocean-droplet-ip-here> port 22: Connection timed out
ERROR: Couldn't connect to Docker daemon at http+docker://ssh - is it running?
Run Code Online (Sandbox Code Playgroud)
我想不通。我试过使用 docker 上下文,主机的环境变量,但没有任何效果。有什么我想念的吗?
编辑 - 还有一个细节。我没有看到任何迹象表明这很重要,但是我的公钥的末尾写着“azuread/”。同样,这不会干扰正常的 ssh。
编辑 - 这是 docker-compose.yml:
version: '3.9' …
Run Code Online (Sandbox Code Playgroud) 我使用的建议,从这个帖子来实现多克的秘密,这样我可以使用本地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?