健康一贴灵,专注医药行业管理信息化

关于DOCKER中容器内文件与宿主目录文件的区别

我在ubuntu下通过docker 拉取nginx,

配置了/etc/nginx/conf.d/default.conf文件,其中有location / { root /usr/share/nginx/html; index index.html index.htm; }。

server {
   listen 80;
   server_name localhost;
   location / {
       root /usr/share/nginx/html;
       index index.html index.htm;
   }
   error_page 404 /404.html;
   location = /404.html {
       internal;
   }
}

当我想时入 /usr/share/nginx/html  目录时,却发现根本没有这个目录???

但我没有找到/usr/share/nginx目录. 为什么程序仍然可以正常运行;

经过询问DEEPSEEK,了解了DOCKER容器的一些内容:

 

在 Docker 容器中运行 Nginx 时,程序能正常运行的原因如下:

1. 容器拥有独立的文件系统

  • Docker 容器使用隔离的文件系统(基于镜像层)。你在容器内看到的 /usr/share/nginx目录仅存在于容器内部,与宿主机(Ubuntu)的文件系统无关。
  • 宿主机上不存在该目录是正常的,因为你没有将容器内的路径映射到宿主机(即未使用 -v挂载卷)。

2. Nginx 镜像已包含默认内容

  • 官方 Nginx 镜像已预置了必要的文件和目录结构:
    • /usr/share/nginx/html:存放默认网页文件(如 index.html)。
    • /etc/nginx:存放 Nginx 配置文件。
  • 即使你在宿主机上看不到这些目录,容器启动时会自动创建它们。

3. 配置文件的加载机制

  • Nginx 启动时会加载容器内的配置文件(包括你修改的 /etc/nginx/conf.d/default.conf)。
  • 配置中指定的 root /usr/share/nginx/html;指向容器内的路径,Nginx 进程在容器内部解析该路径,因此能正确找到文件。

验证容器内目录是否存在

进入容器检查路径是否有效:
# 查找 Nginx 容器 ID 或名称
docker ps

# 进入容器
docker exec -it <容器ID或名称> bash

# 在容器内检查目录
ls /usr/share/nginx/html  # 应看到默认的 index.html 等文件

为什么宿主机上没有该目录?

  • 未挂载宿主机目录:如果你未通过 -v参数将宿主机目录映射到容器(例如 -v /host/path:/usr/share/nginx/html),容器内的文件系统是独立的。
  • 镜像自带内容/usr/share/nginx是镜像内置的基础目录,无需宿主机存在对应路径。

总结

  • 程序正常运行:因为 Nginx 在容器内部访问 /usr/share/nginx/html,该路径在容器文件系统中真实存在。
  • 宿主机不可见:这是 Docker 隔离性的体现,容器内部文件默认不会暴露到宿主机。
如果需要从宿主机访问或修改容器内的文件,可以通过以下方式:
  1. 挂载数据卷:启动容器时添加 -v /宿主机/路径:/usr/share/nginx/html
  2. 进入容器操作:使用 docker exec进入容器修改文件。
  3. 复制文件:用 docker cp命令在宿主机和容器间复制文件。
在 Ubuntu 上使用 Docker 部署 Nginx
Nginx 是一款轻量级、高性能、可靠的 Web 服务器软件,同时也可以用作反向代理服务器、负载均衡器和 HTTP 缓存。结合 Docker 和 Nginx,开发者可以快速搭建稳定的服务环境,简化部署流程,提升开发效率。

安装 Docker

首先,确保你的 Ubuntu 系统是最新的。运行以下命令:

sudo apt update
sudo apt upgrade
复制
然后安装 Docker:

sudo apt install docker.io
复制
安装完成后,启动 Docker 并设置开机自启:

sudo systemctl start docker
sudo systemctl enable docker
复制
拉取 Nginx 镜像

从 Docker Hub 拉取最新的 Nginx 镜像:

sudo docker pull nginx
复制
创建 Nginx 配置文件

在 /etc/nginx/conf.d/ 目录下创建一个配置文件,命名为 default.conf:

sudo mkdir -p /etc/nginx/conf.d
sudo nano /etc/nginx/conf.d/default.conf
复制
在文件中添加以下内容:

server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 404 /404.html;
location = /404.html {
internal;
}
}
复制
运行 Nginx 容器

使用以下命令启动 Nginx 容器:

sudo docker run --name mynginx -v /etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -p 80:80 -d nginx
复制
参数说明:

--name mynginx: 指定容器名称为 mynginx。

-v /etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf: 将本地配置文件挂载到容器内。

-p 80:80: 将主机的 80 端口映射到容器的 80 端口。

-d: 在后台运行容器。

验证 Nginx 是否成功部署

在浏览器中输入你的服务器 IP 地址,应该能看到 Nginx 的欢迎页面。如果一切正常,恭喜你,Nginx 已成功部署在 Docker 容器中。



  

posted @ 2025-11-20 10:06  一贴灵  阅读(10)  评论(0)    收藏  举报
学以致用,效率第一