尝试让 nginx 代理在 node.js 和 docker 的端口 80 和 443 上工作

Trying to get nginx proxy to work on port 80 and 443 for node.js with docker

所以我尝试按照示例 here 做一个 nginx 代理容器来处理所有其他容器。我尝试遵循配置环境变量的格式,以便站点通过 nginx-proxy 工作。到目前为止,如果我使用 80 或 443 以外的端口,我只部署了一个站点。我想知道我可以得到任何帮助,我在下面粘贴了我的两个文件。

Docker 文件

FROM node:carbon                                                                                                      
# Create app directory
WORKDIR ./home/username/website/production

COPY package*.json ./

RUN npm install

# Bundle app source
COPY . .

EXPOSE 8080
CMD [ "npm", "start" ]

docker-compose.yml

version: "3"                                                                                                          
    services:
        website:
            build: .
            volumes:
                - .:/home/user/website
                - ./home/user/website/node_modules
            ports:
                - "8080:8080"
            expose:
                - 80
            environment:
                VIRTUAL_HOST: domain.com
                LETSENCRYPT_HOST: domain.com
                LETSENCRYPT_EMAIL: domain.com
    networks:
        default:
            external:
                name: nginx-proxy      

我试过侦听端口 80 和 443。但是,nginx returns 出现 503 错误。所以我想知道是否有人可以阐明应该如何配置它。

所以我部署了两个单独的容器,一个作为 domain.com,另一个作为子域。domain.com 都在端口 80 上侦听。该站点甚至像预期的那样默认为 https,因为 nginx 处理那。我没有使用 docker-compose.yml 文件,而是按照 github page 的说明重做了 nginx-proxy,而不是使用正常 docker 的博客。之后我使用他们的格式部署如下:

docker run --detach \
    --name your-proxyed-app
    --env "VIRTUAL_HOST=subdomain.yourdomain.tld" \
    --env "LETSENCRYPT_HOST=subdomain.yourdomain.tld" \
    --env "LETSENCRYPT_EMAIL=mail@yourdomain.tld" \
    nginx

这些是在他们的 wiki here. 上找到的 我想我会暂时避免 docker-compose 至少在我了解更多关于 docker 本身之前,但是如果有人可以阐明一些至于为什么 docker-compose 设置不起作用,我们将不胜感激。