当挂载 /etc/nginx/ 容器时不运行

Rap*_*ael 3 nginx docker nginx-config

我想将 /etc/nginx 文件夹安装到主机上的自定义文件夹。但是,每当我尝试此操作时,容器根本不运行。安装其他任何东西似乎都没有问题,尽管我希望它安装的文件夹始终是空的。

我尝试使用 /usr/local/nginx/conf 或 /usr/local/etc/nginx 而不是 /etc/nginx,但该文件夹始终为空。虽然这里容器至少可以运行。这让我相信正是这种特定的安装导致了问题。

这就是我想做的。

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
Run Code Online (Sandbox Code Playgroud)

正如我尝试过的那样,容器似乎与任何其他文件夹一起运行

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
Run Code Online (Sandbox Code Playgroud)

只是为了看看是否有任何不存在的文件夹没有这个问题。

在此之前,我尝试使用 docker Composer 和 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
Run Code Online (Sandbox Code Playgroud)

tried docker-compose up
Run Code Online (Sandbox Code Playgroud)

然而它遇到了同样的问题,它甚至没有启动容器。错误信息:

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
Run Code Online (Sandbox Code Playgroud)

如果我使用不存在的文件夹,它就会无限期地陷入“附加到反向”状态。但我没有收到“没有这样的文件或目录”的消息,尽管这些文件夹的名称完全是虚构的并且绝对不存在。

我是否误解了安装点?我以为我可以通过让容器将其保存在主机上来查看 default.conf 文件,但它不会创建一个文件吗?我必须自己创建一个然后将其安装到容器中吗?安装是否会创建一个用于容器读取的文件夹,而不是一个用于写入的文件夹?我对 docker 和 linux 相当陌生,所以如果这是一个相当愚蠢的问题,请原谅我。

Adi*_*iii 5

您不应该直接挂载整个容器/etc/nginx,它会破坏您的容器,因为它将覆盖以下文件和目录。

conf.d fastcgi_params koi-utf koi-win、mime.types 模块 nginx.conf scgi_params uwsgi_params 和 win-utf

无需深入了解每个目录的详细信息,只需将mime.types其覆盖即可,结果,您的 Nginx 将永远无法在没有该目录的情况下运行/etc/nginx/mime.types

如果你想更新配置那么你应该只挂载

/etc/nginx/conf.d
Run Code Online (Sandbox Code Playgroud)

例如

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
Run Code Online (Sandbox Code Playgroud)

如果确实想更新,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
Run Code Online (Sandbox Code Playgroud)