无法让 Nginx 映像在 Docker 容器内运行

无法让 Nginx 映像在 Docker 容器内运行

我无法弄清楚 docker 的官方 nginx 镜像有什么问题。我在 docker-compose.yml 文件中使用它,如官方镜像页面所示:

web:
image: nginx
volumes:
  - ./custom-nginx.conf:/etc/nginx/conf.d/custom-nginx.conf
ports:
  - "80:80"
environment:
  - NGINX_HOST=mysite.com
  - NGINX_PORT=80
command: /bin/sh -c "envsubst < /etc/nginx/conf.d/custom-nginx.conf > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"

custom-nginx.conf 文件如下所示:

upstream app_server {
    server 127.0.0.1:7999;
}

server {
listen ${NGINX_PORT};
server_name ${NGINX_HOST};
root /var/www/app/;
gzip_static always;

access_log    /var/log/nginx/app.access.log;
error_log     /var/log/nginx/app.error.log;

client_max_body_size 5000M;
proxy_connect_timeout 6000;
proxy_send_timeout    6000;
proxy_read_timeout    6000;
send_timeout          6000;

location / {
    # checks for static file, if not found proxy to app
    try_files $uri @proxy_to_app;
}

location @proxy_to_app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $http_host;

    # we don't want nginx trying to do something clever with
    # redirects, we set the Host: header above already.
    proxy_redirect off;
    proxy_pass http://app_server;
}
location /media/ {
    internal;
    error_page 401 403 404 = @proxy_to_app;
}
location /favicon.ico {
    alias ../static/favicon.ico;
}
}

但是相应的 docker 容器在启动时就退出了,并声称存在各种配置错误,尽管我进行了编辑,但这些错误仍然以某种随机且不明确的顺序相互替代。错误包括重复的上游、无效的参数数量try_files、缺少环境变量等。我在互联网上找到了几个描述类似问题的资料,但那里建议的对我来说不起作用。我试图删除 nginx 自定义配置文件中的上游声明,试图在 docker-compose 命令中为 nginx 映像指示要替换的确切环境变量,如$$NGINX_HOST\$NGINX_HOST- 没有效果,只是一个错误而不是另一个错误。那么,如何使用我提供的 docker-compose.yml 和配置文件使 nginx 容器正常工作?

PS:还是docker logs -t cont_id报同样的错误:nginx:[emerg] /etc/nginx/conf.d/default.conf 中“try_files”指令的参数数量无效

答案1

万一有人遇到类似的问题,我发现这与此处覆盖环境变量有关command: /bin/sh -c "envsubst < /etc/nginx/conf.d/custom-nginx.conf > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"。这就是其他人在网上写的,但他们的所有建议对我来说都不起作用。我最终删除了docker-compose.yml中的这部分envsubst < /etc/nginx/conf.d/custom-nginx.conf > /etc/nginx/conf.d/default.conf &&environment:部分,硬编码主机和端口。它允许nginx启动。然后我在这里遇到一个错误:

upstream app_server {
    server 127.0.0.1:7999;
}

它必须是 docker 网络内应用程序容器地址的名称。

相关内容