docker - 构建 docker 镜像时,在 Dockerfile 中复制文件或通过 ssh 克隆

标签 docker ssh

我已经尝试了一段时间通过 ssh 从远程服务器(不是 gihub)复制文件到我想要构建的 docker 镜像中,但我无法连接到主机。这是关键点之前的 Dockerfile:

FROM r-base:latest

### Install libs
RUN apt-get update && apt-get install -y \
    sudo \
    gdebi-core \
    pandoc \
    pandoc-citeproc  \
    openssh-server \
    openssh-client \
    libcurl4-gnutls-dev \
    libcairo2-dev \
    libxt-dev \
    xtail \
    wget \
    libssl-dev \
    libxml2 \
    libxml2-dev \
    libv8-dev \
    curl \
    gnupg \
    git

COPY ./setup setup

RUN mv setup/.ssh ~/.ssh
RUN touch ~/.ssh/known_hosts
RUN chmod -R 400 ~/.ssh
RUN ssh-agent sh -c 'ssh-add /root/.ssh/id_rsa'
#RUN eval "$(ssh-agent -s)"
#RUN ssh-add -K ~/.ssh/id_rsa #This is commented out as it causes an error
RUN ssh-keyscan hostname > ~/.ssh/known_host
RUN ssh-keygen -R hostname

## THIS IS THE COMMAND WE NEED TO RUN...
RUN scp -r user@hostname:/path/to/folder ./

该文件夹的所有者是user。 id_rsa.pub被添加到主机上用户user的authorized_keys文件中,并在那里重新启动ssh。但是我收到“身份验证失败”错误。我尝试使用我的个人 id_rsa,它可以从命令行运行,但在 docker 内也失败。这是一个 docker 问题吗?可以解决吗?

最佳答案

我终于成功地通过使用 this post 中建议的命令生成 key 来做到这一点

因此,要在本地重现我的案例:

cd setup/.ssh/
ssh-keygen -q -t rsa -N '' -f id_rsa

然后在服务器上添加id_rsa.pub将内容发送到用户 user 的已知主机。可以使用 xclip 将内容复制到剪贴板:xclip -sel clip < setup/.ssh/id_rsa.pub )

Dockerfile:

我已经尝试了一段时间通过 ssh 从远程服务器(不是 gihub)复制文件到我想要构建的 docker 镜像中,但我无法连接到主机。这是关键点之前的 Dockerfile:

FROM r-base:latest

### Install libs
RUN apt-get update && apt-get install -y \
    sudo \
    gdebi-core \
    pandoc \
    pandoc-citeproc  \
    openssh-server \
    openssh-client \
    libcurl4-gnutls-dev \
    libcairo2-dev \
    libxt-dev \
    xtail \
    wget \
    libssl-dev \
    libxml2 \
    libxml2-dev \
    libv8-dev \
    curl \
    gnupg \
    git

COPY ./setup setup

RUN chmod -R 600 ~/.ssh
RUN echo "IdentityFile /root/.ssh/id_rsa" >> /etc/ssh/ssh_config
RUN echo "StrictHostKeyChecking no" >> /etc/ssh/ssh_config

## THIS IS THE COMMAND WE NEED TO RUN...
RUN scp -r user@hostname:/path/to/folder ./

关于docker - 构建 docker 镜像时,在 Dockerfile 中复制文件或通过 ssh 克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56755004/

相关文章:

python - 从服务器通过 SSH 远程登录

mysql - 在 Django 上,如何通过 SSH 连接到远程服务器上的 MySQL 数据库?

ubuntu - Torify/torsocks ssh 仅适用于设备本身,不适用于其他设备

python - 如何将 Docker 添加到 Django + Gunicorn + Nginx + Fabric

docker - 如果 Docker 容器尚不存在,您如何运行它,或者如果存在则启动它?

docker - Docker(OCI)容器中的服务能否读取LABEL命令添加的容器注释?

c - 读取 ssh 命令执行的标准输出

docker - 如何删除接口(interface)docker0

docker - Docker无法调和Kubernetes插件组件的状态

linux - 如何将 ssh key 添加到远程服务器?