首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSH代理与Dockerfile和Dockerfile的结合

SSH代理与Dockerfile和Dockerfile的结合
EN

Stack Overflow用户
提问于 2022-05-25 21:22:52
回答 2查看 3.3K关注 0票数 6

我在我的NestJS应用程序中使用私人github回购有问题。当我使用docker build命令创建对接者映像时,该映像将被成功创建,并且一切都正常。但是,我不能在docker-compose中使用Dockerfile。

下面是Dockerfile中使用BuildKit挂载特性的部分:

代码语言:javascript
复制
RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts

RUN --mount=type=ssh npm install

仅用Dockerfile构建映像时,我传递--ssh default参数,就像这样,它成功地安装了私有回购:

代码语言:javascript
复制
docker build --ssh default -t CONTAINER_NAME .

这篇文章之后,我在docker-compose.yml文件中包含了如下所示的$SSH_AUTH_SOCK

代码语言:javascript
复制
environment:
      - NODE_ENV:${NODE_ENV}
      - SSH_AUTH_SOCK:${SSH_AUTH_SOCK}
volumes:
      - $SSH_AUTH_SOCK:${SSH_AUTH_SOCK}

但是,每当我尝试运行docker-compose up时,我都会得到这个错误。

代码语言:javascript
复制
#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.

知道我做错了什么吗?

EN

回答 2

Stack Overflow用户

发布于 2022-08-14 20:29:14

他们将ssh标志作为选项添加到撰写:https://github.com/compose-spec/compose-spec/pull/234中的构建键中。

代码语言:javascript
复制
services:
  sample:
    build:
      context: .
      ssh:
        - default
票数 6
EN

Stack Overflow用户

发布于 2022-05-25 22:59:31

您的environment语法不正确。environment块可以是NAME=VALUE对的列表:

代码语言:javascript
复制
environment:
  - SSH_AUTH_SOCK=${SSH_AUTH_SOCK}

也可以是一本字典:

代码语言:javascript
复制
environment:
  SSH_AUTH_SOCK: ${SSH_AUTH_SOCK}

您的容器不是这些东西,所以您的容器没有SSH_AUTH_SOCK环境变量。

如果我使用这个docker-compose.yaml文件:

代码语言:javascript
复制
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

我可以将exec放入容器中(在等待包安装完成之后),并验证它是否能够与我的代理对话:

代码语言:javascript
复制
$ docker-compose exec ssh ssh-add -l
2048 SHA256:... (RSA)
4096 SHA256:... (RSA)

另外,关于volumes:块的一个无关的评论是:您在引用变量的方式上是不一致的。这不是一个问题,但它伤害了我的大脑(这样的矛盾有时会在其他情况下导致奇怪的问题)。在引用环境变量时,最好始终使用${varname}语法:

代码语言:javascript
复制
volumes:
  - ${SSH_AUTH_SOCK}:${SSH_AUTH_SOCK}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72384329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档