如何从 Docker 容器访问主机中的文件?

Jus*_*ang 14 ubuntu docker docker-machine docker-container

我在 Ubuntu 服务器主机上有一个 Docker Ubuntu 仿生容器。从容器中,我可以看到主机驱动器安装为 /etc/hosts,它不是目录。尝试在不同的位置卸载和重新安装但抛出permission denied错误,当我以 root 身份尝试时会发生这种情况。那么如何访问主机系统的内容呢?

JSh*_*use 21

首先,etc/hosts是所有 linux 系统上都存在的网络文件,它与驱动器或 docker 无关。

其次,如果要访问 Docker 容器内的主机文件系统的一部分,则需要使用volumes。使用-vdocker run 命令中的标志,您可以指定主机上的目录以安装到容器中,格式如下:

-v /path/on/host:/path/inside/container
Run Code Online (Sandbox Code Playgroud)

例如:

docker run -v /path/on/host:/path/inside/container <image_name>
Run Code Online (Sandbox Code Playgroud)

  • @JamesGardiner 这不是真的,docker 直接在主机上访问文件。没有单独的副本或快照。您在主机上所做的任何文件系统更改将立即在容器内可见,反之亦然。听起来您遇到了缓存问题,因为在将文件加载到内存中时尝试从 nginx 下交换文件,这即使在裸机上也是一个问题。我想简单地在容器内重新启动 nginx 也可以解决问题。 (8认同)
  • 这里需要明确的是,一旦创建了容器,就无法去更改共享(-v)目录中的文件。容器会拍摄正在发生的情况的快照,并且您不能依赖主机上的文件更改将转换为 docker 容器。Docker 容器应该运行修改文件,然后退出。例如,如果您有一个 Web 服务器,并且它使用了 nginx docker 中的卷共享,则必须停止启动容器才能可靠地将文件更新到容器中。是的,我知道。完全是废话。 (3认同)

qui*_*997 16

例子。容器 ID:32162f4ebeb0

#HOST BASH SHELL

docker cp 32162f4ebeb0:/dir_inside_container/image1.jpg /dir_inside_host/image1.jpg


docker cp /dir_inside_host/image1.jpg  32162f4ebeb0:/dir_inside_container/image1.jpg 


Run Code Online (Sandbox Code Playgroud)

  • 谢谢,如果您有一个正在运行的容器,其中有文件但没有安装任何卷,那么它会很好用 (3认同)