【问题标题】:How to scp files from local machine directly to a docker container on a remote machine (without having to repeatedly copy)?如何将文件从本地机器直接 scp 到远程机器上的 docker 容器(无需重复复制)?
【发布时间】:2020-08-06 08:42:42
【问题描述】:

我是 Docker 新手,我想将文件直接复制到本地计算机或从本地计算机复制到远程计算机上的 docker 容器,而不必将本地文件 scp 文件复制到远程计算机,然后使用 docker cp 复制这些文件文件到容器。我的容器上没有安装 SSH 服务器,我也不想重建我的镜像来包含它。

我尝试了以下第二个答案给出的解决方案:How to SSH into Docker?。我在托管 Docker 的远程机器上运行了以下命令: docker run -d -p 2222:22 -v /var/run/docker.sock:/var/run/docker.sock -e CONTAINER=kind_tu -e AUTH_MECHANISM=noAuth jeroenpeeters/docker-ssh

kind_tu 是我正在运行的容器的名称。

然后在我的本地机器上使用:ssh -L 2222:localhost:2222 remote_account_name@remote_ip,然后是scp -P 2222 test_file remote_account_name@remote_ip:/destination/path(我也不熟悉端口转发,所以我不确定我的符号是否正确)。这样做时,我得到以下信息:

ssh: connect to host remote_ip port 2222: Connection refused

lost connection

由于远程机器在我学校的校园内,这可能是防火墙的问题吗?

总而言之,我不确定我正在做的事情是否正确。

【问题讨论】:

  • 由于 Docker 容器被相当常规地删除和重新创建,尝试将文件直接复制到容器文件系统中(一旦容器被删除,它们就会丢失)通常不是正确的方法。您可能会考虑绑定挂载主机目录(保存复制步骤),甚至将这些文件直接构建到您的映像中。
  • 嗨大卫,我目前正在从我的容器中构建的软件运行模拟,我需要反复将可视化文件从远程容器移出到我的主机,以便将它们运行到可视化程序中.我想知道您是否可以详细说明绑定安装是什么以及它是否是解决我的问题的最佳方法

标签: docker ssh scp portforwarding


【解决方案1】:

根据您作为对 David 的回复的评论,以下是如何将您的可视化文件的目录 bind-mount 到您的容器的说明:

在主机系统上创建一个目录,例如mkdir /home/sarah/viz/。然后,将其安装到您的 docker 容器中,例如使用

docker run -v /home/sarah/viz:/data/viz … kind_tu …

kind_tu 容器内的可视化软件应将文件放在目录/data/viz 中,然后该目录位于主机系统上的/home/sarah/viz/ 中,您可以使用scp 或@ 将它们下载到本地计算机987654330@ 或者您可以连接到远程机器。

您还可以使用docker-compose 来获得更持久的环境。用the bind-mountkind_tu 容器的所有其他配置写入文件docker-compose.yml

version: '3'
  services:
    kind_tu:
      image: your_viz_software_image:latest
      volumes:
        - /home/sarah/viz:/data/viz:rw
      …

然后,您可以使用docker-compose up -d 而不是docker run …,并且一切都根据撰写文件中的配置进行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-19
    • 2016-09-27
    • 2021-03-08
    • 2019-10-07
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多