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

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

不使用目录映射。

阅读 3.1k
4 个回答

提供两种思路:

  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
新手上路,请多包涵

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

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/

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

COPY ./.ssh /tmp/.ssh

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏