开发者问题收集

具有自定义配置文件的 Docker Nginx:未知指令“服务器”

2021-02-06
974

我正在尝试实现 Django / Gunicorn / Nginx dockerized。 对于 Django gunicorn 和 postgresql,一切都运行良好。但 Nginx 决定不工作。

我制作了一个自定义 Nginx 配置文件,它给了我错误:

unknown directive "server"

所以我最大限度地改变了它,尝试用 docker run 代替 docker compose。我做了一个 Dockerfile,因为卷挂载似乎不起作用,但结果相同。

这是 dockerfile:

FROM nginx:1.19.0-alpine
COPY ./nginx.conf /etc/nginx/conf.d/default.conf

和 nginx.conf

server {
    listen 80;
    location / {
        proxy_pass http://127.0.0.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }
}

非常简单。但是如果我尝试运行这个 docker:

docker build -t nginx .
docker run nginx

仍然是同样的错误。

这是运行命令的完整日志:

docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: /etc/nginx/conf.d/default.conf differs from the packages version, exiting /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2021/02/06 13:58:21 [emerg] 1#1: unknown directive "upstream" in /etc/nginx/conf.d/default.conf:1 nginx: [emerg] unknown directive "upstream" in /etc/nginx/conf.d/default.conf:1

我花了将近 6 个小时,可能读了一半的 StackOverflow 却没有结果。

有什么救命的想法吗?

2个回答

我遇到过这种情况,必须在 VS Code 中将编码从带 BOM 的 UTF-8 更改为 UTF-8 才能正常工作

Jon
2024-04-04

好的,终于明白了。

我删除了完整的 .conf 文件,无需复制粘贴,直接用 vim 就可以了。

看来 PyCharm 保存了一个问题。

Tartempion34
2021-02-06