报错:nginx [emerg] open() etcnginxnginx.conf failed (2 No such file or directory)
报错:nginx: [emerg] open() “/etc/nginx/nginx.conf” failed (2: No such file or directory)
背景
:在创建nginx容器时,想把宿主机上的某一目录挂载到容器的/etc/nginx
路径,报错"/etc/nginx/nginx.conf" failed (2: No such file or directory)。报错信息说明找不到/etc/nginx/
目录下的nginx.conf
文件。
思考
:这里很奇怪,我需要挂载的是容器中的/etc/nginx/路径,是一个目录。我为什么不能将宿主机上的任一空目录挂载到容器中的/etc/nginx/路径呢?而当我挂载完后,容器/etc/nginx/路径下的内容不会完全复制一份到宿主机被挂载的空目录下吗?为什么还需要在宿主机被挂载的目录上事先存有nginx.conf
文件呢?
原因
:(ai)“如果你不想使用自定义的nginx.conf
文件,你可以不挂载 /etc/nginx 目录,而是让容器使用其默认的配置文件。但如果你选择挂载这个目录,就必须确保 nginx.conf
文件存在。”
基于上面这句话,我将不能把宿主机上任一空目录挂载到nginx容器下的etc/nginx,因为etc/nginx这个路径存放着与nginx初始化相关的配置文件。我需要保证与etc/nginx路径对应的挂载路径存有nginx.conf配置文件,我才能将对应的宿主机目录挂载到容器的etc/nginx路径。
重点
事实是,想要挂载到容器的etc/nginx
目录,光有nginx.conf
文件是不够的。
我参考官方文档
将nginx复制出来放到/mydata/nginx
目录下,尝试再次创建容器:
docker run -p 80:80 --name nginx \
-v /mydata/nginx:/etc/nginx \
-d nginx
仍然出现报错
,报错信息如下:“/etc/nginx/mime.types” failed (2: No such file or directory) in /etc/nginx/nginx.conf:15,意思是找不到mime.types文件…
那怎么办呢?
方法①
:
将宿主机上的nginx.conf文件
挂载到容器/etc/nginx路径下nginx.conf文件
,就能成功创建nginx容器了,如下:
docker run -p 80:80 --name nginx \
-v /mydata/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
-d nginx
# :ro的意思是将宿主机上的nginx.conf文件以只读模式挂载到容器内部,这样容器可以使用这个配置文件,但是不能修改它。
该方法参考官方文档:https://hub.docker.com/_/nginx
这个网站貌似需要科学上网才能访问…
所以我把相关部分截图放在这里:
方法②
:
新建一个nginx容器,将nginx容器/etc/nginx
路径下的全部文件复制到宿主机的/mydata/nginx
路径下(/mydata/nginx
是我将要挂载的路径),然后删除nginx容器,新创建一个有目录挂载的nginx容器即可。
命令如下:
docker run -p 80:80 --name nginx -d nginx
docker cp nginx:/etc/nginx /mydata/nginx
docker rm -f nginx
docker run -p 80:80 --name nginx \
-v /mydata/nginx:/etc/nginx \
-d nginx
这样就可以将/mydata/nginx目录挂载到容器的/etc/nginx目录下了。
以下参考内容转载自:https://blog.csdn.net/qq_33469537/article/details/126586160
nginx: [emerg] open() “/etc/nginx/nginx.conf” failed (2: No such file or directory)
1.随便启动一个nginx实例,只是为了复制出配置
如果没有对应的nginx版本,可以用docker pull nginx下载最新版本
docker run -p 80:80 --name nginx -d nginx
2.将容器内的配置文件拷贝到当前文件
我们将配置文件放到 /mydata/nginx目录下
cd /mydata/
mkdir nginx
docker container cp nginx:/etc/nginx .
mv nginx/ conf/
mkdir nginx
mv conf/ nginx/
目录结构如下:
drwxr-xr-x. 3 root root 132 Dec 29 2021 conf
drwxr-xr-x. 2 root root 6 Aug 29 00:38 html
drwxr-xr-x. 2 root root 41 Aug 29 00:39 logs
3.终止+删除原容器
docker stop nginx
docker rm nginx
4.创建新的nginx,执行以下命令
docker run -p 80:80 --name nginx
-v /mydata/nginx/html:/usr/share/nginx/html
-v /mydata/nginx/logs:/var/log/nginx
-v /mydata/nginx/conf:/etc/nginx
-d nginx
5.创建成功,访问nginx
我们可以在我们挂载的mydata/nginx/html目录下创建 index.html。