安装时 /etc/nginx/ 容器不 运行
When mounting /etc/nginx/ container doesnt run
我想将 /etc/nginx 文件夹装载到主机上的自定义文件夹中。但是,每当我尝试这个时,容器根本没有 运行。安装其他任何东西似乎都不是问题,尽管我希望它安装到的文件夹总是空的。
我尝试使用 /usr/local/nginx/conf 或 /usr/local/etc/nginx 而不是 /etc/nginx,但文件夹始终为空。虽然这里容器 运行s 至少。这就是让我相信是这种特定安装导致问题的原因。
这就是我想做的。
docker run -p 80:80 -p 443:443 -v /home/pi/nginx_files/config:/etc/nginx -v /home/pi/nginx_files/certs:/etc/ssl/private -d nginx
容器似乎 运行 与任何其他文件夹一样,我试过
docker run -p 80:80 -p 443:443 -v /home/pi/nginx_files/config:/etc/nginx/b -v /home/pi/nginx_files/certs:/etc/ssl/private -d nginx
只是为了看看是否有任何不存在的文件夹没有这个问题。
在此之前,我尝试使用 docker 作曲家和 docker-compose.yaml
version: '3'
services:
reverse:
container_name: reverse
hostname: reverse
image: nginx
ports:
- 80:80
- 443:443
volumes:
- <path/to/your/config>:/etc/nginx
- <path/to/your/certs>:/etc/ssl/private
和
tried docker-compose up
然而它遇到了同样的问题,它甚至没有启动容器。错误信息:
Creating network "nginx_files_default" with the default driver
Creating reverse ... done
Attaching to reverse
reverse | 2019/08/31 00:41:07 [emerg] 1#1: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)
reverse | nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)
reverse exited with code 1
如果我使用不存在的文件夹,它就会无限期地卡在 "Attaching to reverse" 中。但是我没有收到消息 "no such file or directory" 尽管文件夹完全是虚构的名称并且绝对不存在。
我是不是理解错了挂载点?我以为我可以通过让容器将其保存在主机上来查看 default.conf 文件,但它不会创建一个文件吗?我必须自己创建一个然后将其安装到容器中吗?挂载是否会创建一个文件夹供容器读取,而不是创建一个文件夹供写入?我是 docker 和 linux 的新手,如果这是一个相当愚蠢的问题,请原谅我。
你不应该直接挂载整个 /etc/nginx
,它会破坏你的容器,因为它会覆盖以下文件和目录。
conf.d fastcgi_params koi-utf koi-win, mime.types modules
nginx.conf scgi_params uwsgi_params and win-utf
不去细说每个目录,直接取mime.types
会被覆盖,结果你的Nginx 永远无法运行 没有/etc/nginx/mime.types
如果你想更新配置那么你应该只挂载
/etc/nginx/conf.d
例如
docker run -p 80:80 -p 443:443 -v /home/pi/nginx_files/config:/etc/nginx/conf.d -v /home/pi/nginx_files/certs:/etc/ssl/private -d nginx
如果真的想更新 nginx.conf
那么你应该挂载确切的文件,而不是整个目录
docker run -p 80:80 -p 443:443 -v /home/pi/nginx_files/config/nginx.conf:/etc/nginx/nginx.conf -v /home/pi/nginx_files/certs:/etc/ssl/private -d nginx
正如评论和@Adiii 的 中所指出的,您应该避免将目录绑定安装到 /etc/nginx/
,因为您是 "overriding" 容器配置(想一想由于将 USB 设备挂载到已包含文件的文件夹,ls -alF
将显示 USB 设备的内容,挂载点中存在的文件只有在卸载 USB 设备后才可用)。
您可以从 运行ning 容器的实例中提取 nginx.conf
和 default.conf
,例如:
- 运行一个
nginx
容器:docker run --rm -d --name nginx nginx:1.17.3
- 使用
docker cp
复制文件:docker cp nginx:/etc/nginx/nginx.conf /path/to/nginx.conf
和docker cp nginx:/etc/nginx/conf.d/default.conf /path/to/default.conf
- 停止容器:
docker stop nginx
(根据 docker run
中的 --rm
,容器将被删除)
然后您可以修改配置文件并将它们绑定挂载到容器中,即:docker run --rm -d --name nginx -v /path/to/nginx.conf:/etc/nginx/nginx.conf nginx:1.17.3
否则,您可以使用自定义配置构建自己的映像,例如:
├── default.conf
├── Dockerfile
└── nginx.conf
FROM nginx:1.17.3
COPY nginx.conf /etc/nginx/nginx.conf
COPY default.conf /etc/nginx/conf.d/default.conf
您可以构建您的图像:docker build --rm -t so:57734446 .
和 运行 它:docker run --rm -d --name my-nginx so:57734446
。对于图像的更高级用例,这是我的 nginx-modsecurity build that extends the official nginx 图片。
我想将 /etc/nginx 文件夹装载到主机上的自定义文件夹中。但是,每当我尝试这个时,容器根本没有 运行。安装其他任何东西似乎都不是问题,尽管我希望它安装到的文件夹总是空的。
我尝试使用 /usr/local/nginx/conf 或 /usr/local/etc/nginx 而不是 /etc/nginx,但文件夹始终为空。虽然这里容器 运行s 至少。这就是让我相信是这种特定安装导致问题的原因。
这就是我想做的。
docker run -p 80:80 -p 443:443 -v /home/pi/nginx_files/config:/etc/nginx -v /home/pi/nginx_files/certs:/etc/ssl/private -d nginx
容器似乎 运行 与任何其他文件夹一样,我试过
docker run -p 80:80 -p 443:443 -v /home/pi/nginx_files/config:/etc/nginx/b -v /home/pi/nginx_files/certs:/etc/ssl/private -d nginx
只是为了看看是否有任何不存在的文件夹没有这个问题。
在此之前,我尝试使用 docker 作曲家和 docker-compose.yaml
version: '3'
services:
reverse:
container_name: reverse
hostname: reverse
image: nginx
ports:
- 80:80
- 443:443
volumes:
- <path/to/your/config>:/etc/nginx
- <path/to/your/certs>:/etc/ssl/private
和
tried docker-compose up
然而它遇到了同样的问题,它甚至没有启动容器。错误信息:
Creating network "nginx_files_default" with the default driver
Creating reverse ... done
Attaching to reverse
reverse | 2019/08/31 00:41:07 [emerg] 1#1: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)
reverse | nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)
reverse exited with code 1
如果我使用不存在的文件夹,它就会无限期地卡在 "Attaching to reverse" 中。但是我没有收到消息 "no such file or directory" 尽管文件夹完全是虚构的名称并且绝对不存在。
我是不是理解错了挂载点?我以为我可以通过让容器将其保存在主机上来查看 default.conf 文件,但它不会创建一个文件吗?我必须自己创建一个然后将其安装到容器中吗?挂载是否会创建一个文件夹供容器读取,而不是创建一个文件夹供写入?我是 docker 和 linux 的新手,如果这是一个相当愚蠢的问题,请原谅我。
你不应该直接挂载整个 /etc/nginx
,它会破坏你的容器,因为它会覆盖以下文件和目录。
conf.d fastcgi_params koi-utf koi-win, mime.types modules nginx.conf scgi_params uwsgi_params and win-utf
不去细说每个目录,直接取mime.types
会被覆盖,结果你的Nginx 永远无法运行 没有/etc/nginx/mime.types
如果你想更新配置那么你应该只挂载
/etc/nginx/conf.d
例如
docker run -p 80:80 -p 443:443 -v /home/pi/nginx_files/config:/etc/nginx/conf.d -v /home/pi/nginx_files/certs:/etc/ssl/private -d nginx
如果真的想更新 nginx.conf
那么你应该挂载确切的文件,而不是整个目录
docker run -p 80:80 -p 443:443 -v /home/pi/nginx_files/config/nginx.conf:/etc/nginx/nginx.conf -v /home/pi/nginx_files/certs:/etc/ssl/private -d nginx
正如评论和@Adiii 的 /etc/nginx/
,因为您是 "overriding" 容器配置(想一想由于将 USB 设备挂载到已包含文件的文件夹,ls -alF
将显示 USB 设备的内容,挂载点中存在的文件只有在卸载 USB 设备后才可用)。
您可以从 运行ning 容器的实例中提取 nginx.conf
和 default.conf
,例如:
- 运行一个
nginx
容器:docker run --rm -d --name nginx nginx:1.17.3
- 使用
docker cp
复制文件:docker cp nginx:/etc/nginx/nginx.conf /path/to/nginx.conf
和docker cp nginx:/etc/nginx/conf.d/default.conf /path/to/default.conf
- 停止容器:
docker stop nginx
(根据docker run
中的--rm
,容器将被删除)
然后您可以修改配置文件并将它们绑定挂载到容器中,即:docker run --rm -d --name nginx -v /path/to/nginx.conf:/etc/nginx/nginx.conf nginx:1.17.3
否则,您可以使用自定义配置构建自己的映像,例如:
├── default.conf
├── Dockerfile
└── nginx.conf
FROM nginx:1.17.3
COPY nginx.conf /etc/nginx/nginx.conf
COPY default.conf /etc/nginx/conf.d/default.conf
您可以构建您的图像:docker build --rm -t so:57734446 .
和 运行 它:docker run --rm -d --name my-nginx so:57734446
。对于图像的更高级用例,这是我的 nginx-modsecurity build that extends the official nginx 图片。