Abb*_*han 23 ssh node.js docker dockerfile docker-compose
我在我的一个 NestJS 应用程序中使用私有 github 存储库时遇到问题。当我使用命令创建 docker 映像时docker build,映像已成功创建,并且一切正常。但是我无法将 Dockerfile 与docker-compose.
Dockerfile这是我使用挂载功能的部分BuildKit:
RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts
RUN --mount=type=ssh npm install
Run Code Online (Sandbox Code Playgroud)
当单独构建图像时,Dockerfile我传递了--ssh default参数,如下所示,它成功安装了私有存储库:
docker build --ssh default -t CONTAINER_NAME .
Run Code Online (Sandbox Code Playgroud)
在这篇文章之后,docker-compose.yml我在文件中包含了$SSH_AUTH_SOCK如下内容:
environment:
- NODE_ENV:${NODE_ENV}
- SSH_AUTH_SOCK:${SSH_AUTH_SOCK}
volumes:
- $SSH_AUTH_SOCK:${SSH_AUTH_SOCK}
Run Code Online (Sandbox Code Playgroud)
但是,每当我尝试运行时都会出现此错误docker-compose up
#11 44.97 npm ERR! code 128
#11 44.97 npm ERR! An unknown git error occurred
#11 44.97 npm ERR! command git --no-replace-objects ls-remote ssh://git@github.com/organization/repo.git
#11 44.97 npm ERR! git@github.com: Permission denied (publickey).
#11 44.97 npm ERR! fatal: Could not read from remote repository.
#11 44.97 npm ERR!
#11 44.97 npm ERR! Please make sure you have the correct access rights
#11 44.97 npm ERR! and the repository exists.
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
The*_*ool 35
他们已将 ssh 标志添加为 compose 中构建密钥的选项: https: //github.com/compose-spec/compose-spec/pull/234
services:
sample:
build:
context: .
ssh:
- default
Run Code Online (Sandbox Code Playgroud)
你的environment语法不正确。该environment块可以是对的列表NAME=VALUE:
environment:
- SSH_AUTH_SOCK=${SSH_AUTH_SOCK}
Run Code Online (Sandbox Code Playgroud)
或者它可以是一本字典:
environment:
SSH_AUTH_SOCK: ${SSH_AUTH_SOCK}
Run Code Online (Sandbox Code Playgroud)
你的容器不是这些东西,所以你的容器没有SSH_AUTH_SOCK环境变量。
如果我使用这个docker-compose.yaml文件:
version: "3"
services:
ssh:
image: fedora:35
environment:
- SSH_AUTH_SOCK=${SSH_AUTH_SOCK}
volumes:
- ${SSH_AUTH_SOCK}:${SSH_AUTH_SOCK}
command:
- sh
- -c
- |
yum -y install openssh-clients
sleep inf
Run Code Online (Sandbox Code Playgroud)
我可以exec进入容器(等待包安装完成后)并验证它是否能够与我的代理通信:
$ docker-compose exec ssh ssh-add -l
2048 SHA256:... (RSA)
4096 SHA256:... (RSA)
Run Code Online (Sandbox Code Playgroud)
另外,关于您的volumes:块的一条不相关的评论:您引用变量的方式不一致。这不是问题,但它伤害了我的大脑(像这样的不一致有时会在其他情况下导致奇怪的问题)。${varname}在引用环境变量时,您最好始终使用以下语法:
volumes:
- ${SSH_AUTH_SOCK}:${SSH_AUTH_SOCK}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17839 次 |
| 最近记录: |