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

How to access files in host from a Docker Container?

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

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

其次,如果您想访问 Docker 容器内的主机文件系统的一部分,您需要使用 volumes。在 docker 运行 命令中使用 -v 标志,您可以指定主机上的目录以挂载到容器中,格式为:

-v /path/on/host:/path/inside/container

例如:

docker run -v /path/on/host:/path/inside/container <image_name>

Docker directly manages the /etc/hosts files in containers。你不能在那里绑定挂载文件。

在多个地方手动维护主机名到 IP 地址的映射可能很难保持最新。考虑 运行 DNS 服务器,如 BIND 或 dnsmasq,或使用托管服务,如 Amazon 的 Route 53,或服务发现系统,如 Consul(附带提供 DNS 接口)。

如果您确实需要将条目添加到容器的 /etc/hosts 文件中,docker run --add-host 选项或 Docker Compose extra_hosts: setting 即可。

作为一般规则,容器无法访问主机的文件系统,除非 docker run -v 选项将特定目录映射到容器中。同样作为一般规则,您不能直接更改容器中的挂载点;使用不同的 -v 选项停止、删除和重新创建它。

例子。 容器 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