当前位置: 首页 > 知识库问答 >
问题:

后端 - 请问docker容器内的shell脚本如何访问宿主机的文件?

郜俊晤
2023-06-02

如题,我想在 docker 容器内拷贝宿主机 .ssh 目录内的文件,在线搜了半天无结果,在此请大神帮忙,谢谢。

不使用目录映射。

共有4个答案

董同
2023-06-02

docker容器内的shell脚本在不使用目录映射的情况下,访问不到宿主机的文件.
你应该使用DockerFileCOPY/ADD命令,在启动容器时,把需要的文件复制进去

COPY ./.ssh /tmp/.ssh

然后再用docker容器内的shell脚本,对/tmp/.ssh做你想做的操作

公子昂
2023-06-02

docker cp :用于容器与主机之间的数据拷贝。

实例
将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。

docker cp /www/runoob 96f7f14e99ab:/www/
将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www。

docker cp /www/runoob 96f7f14e99ab:/www
将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。

docker cp  96f7f14e99ab:/www /tmp/
冯翔
2023-06-02

.ssh/ 目录作为 Volume 挂载到容器内

公冶麒
2023-06-02

提供两种思路:

  1. 对于已经运行的容器,通过 cp 命令拷贝
docker cp ~/.ssh/ CONTAINER_ID:/root/
  1. 启动时,通过 -v 直接挂载 volume 进去
docker run -it -v ~/.ssh:/root/.ssh CONTAINER_IMAGE

需要注意的是,这样操作时,容器内尽量不要修改 .ssh,修改会影响到宿主机,建议拷贝或仅做读取使用。

补充:看到你修改了问题描述,不想通过挂载实现,但这基本不太可能做到,如果容器可以随意访问宿主机的文件未免也太不安全了。

如果你是考虑到挂载会有危险,还可以考虑通过挂载并设定 :ro 只读,如:

docker run -it -v ~/.ssh:/root/.ssh:ro CONTAINER_IMAGE
 类似资料:
  • 问题内容: 我是Docker的新手。 我运行了一个10节点的图像,并在运行的容器中克隆了一个存储库,运行了使用文件监视程序启动服务器的应用程序。我需要访问容器内的代码库,并在Windows主机上运行的IDE中打开它。如果完成了,那么我还希望当我在IDE中更改文件时,这些更改会在容器中引起文件监视程序。 任何帮助表示赞赏。谢谢, 问题答案: 您正在寻找的概念称为卷。您需要启动一个容器并在其中安装主机

  • WSL2下的docker容器无法访问宿主机下的docker容器端口如何解决? 宿主机是一台windows11电脑,在windows的docker desktop中开启了一个docker容器,监听5005端口;测试在windows powershell下和wsl bash下访问127.0.0.1:5005端口,能够正常访问;所以wsl本身的网络配置应该是没有问题。 在Windows的docker d

  • 我有一个docker应用程序,我使用以下docker compose。yml运行它: 我有一个没有docker化的服务器在我的机器上运行,我可以通过访问它。我希望我的服务能够访问它。 我发现有人建议在我的服务配置中添加以下内容: 但是当我添加这个时,并尝试,我得到。当我尝试<code>curl时,也会出现同样的错误http://host.docker.internal:3000。 我拼命地尝试将端

  • 问题内容: 我有一个运行詹金斯的码头集装箱。作为构建过程的一部分,我需要访问在主机上本地运行的Web服务器。是否可以将主机Web服务器(可以配置为在端口上运行)暴露给jenkins容器? 编辑:我正在Linux机器上本地运行docker。 更新: 除了下面的@larsks答案之外,要从主机获取主机IP的IP地址,我还要执行以下操作: 问题答案: 在Linux上本地运行Docker时,您可以使用接口

  • 我有一个docker容器在运行Jenkins。作为构建过程的一部分,我需要访问在主机上本地运行的web服务器。有没有一种方法可以将主机web服务器(可以配置为在端口上运行)公开给jenkins容器? 编辑:我正在Linux机器上原生运行docker。 更新: 除了@larsks下面的答案之外,要从主机获取主机IP的IP地址,我还做了以下操作:

  • 我有两个docker容器在我的Mac主机上运行-容器1是docker Hub的Jenkins,容器2是docker Hub的SonarQube。我有两个容器成功运行。我可以通过从我的主机访问Jenkins,我可以通过访问我的SonarQube。 詹金斯容器是这样启动的: SonarQube容器是这样启动的: 难道我不应该能够从我的主机通过它们的内部IP地址访问每个容器吗? 我如何测试一个容器(例如