gpt4 book ai didi

docker - 如何设置端口以将静态网站作为 nginx docker 容器运行?

转载 作者:行者123 更新时间:2023-12-01 08:44:30 25 4
gpt4 key购买 nike

我正在尝试使用 docker 和 nginx 运行一个静态网站。我在 ubuntu 机器上使用 jwilder/nginx-proxy 作为反向代理。但是调用 https://www.example.com 会返回 502 错误。
我认为正确设置端口有问题,但我没有看到我的错误。

这是我的 Dockerfile...

FROM nginx:alpine
COPY . /usr/share/nginx/html

EXPOSE 3499

...这就是我如何配置我的 gitlab ci:
build:
stage: build
image: docker:stable
script:
- docker build -t ${DOCKER_CONTAINER}:latest .

production:
stage: release
image: docker:stable
variables:
GIT_STRATEGY: none
script:
- docker run
--name ${DOCKER_CONTAINER}
--detach
--restart=always
-e VIRTUAL_HOST=www.example.com
-e LETSENCRYPT_HOST=www.example.com
-p 3499
${DOCKER_CONTAINER}:latest
environment:
name: production
url: https://www.example.com

最佳答案

问题是假设只使用 EXPOSE 3499 更改了 nginx 配置上的端口。 nginx 仍在容器内的端口 80 上运行。
EXPOSE 是说你的意图,图像确实打算暴露 3499 。但是里面的服务器需要进行配置,以确保它监听的端口是相同的。

由于您使用的是官方 docker nginx 镜像,因此您可以阅读下面的文档

https://hub.docker.com/_/nginx

在 nginx 配置中使用环境变量

开箱即用的 nginx 不支持大多数配置块内的环境变量。但是,如果您需要在 nginx 启动之前动态生成 nginx 配置,可以使用 envsubst 作为一种解决方法。

这是一个使用 docker-compose.yml 的示例:

web:
image: nginx
volumes:
- ./mysite.template:/etc/nginx/conf.d/mysite.template
ports:
- "8080:80"
environment:
- NGINX_HOST=foobar.com
- NGINX_PORT=80
command: /bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
mysite.template 文件可能包含如下变量引用:
listen ${NGINX_PORT};

因此,如您所见,您需要在图像中做一些工作以确保您的 nginx 实际监听 3499
更新:2019 年 7 月 23 日

如果您不想使用环境变量来执行此操作。然后你可以使用 docker-compose 覆盖文件

因此,您将保留一个本地文件 default.conf,您将在其中更改内容
server {
listen 3499;
server_name localhost;

#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}

并在您的 docker-compose.yml 中挂载此文件
web:
image: nginx
volumes:
- ./default.conf:/etc/nginx/conf.d/default.conf
ports:
- "8080:3499"

这将确保文件是正确的。如果您不想在运行时覆盖,您甚至可以将其复制到 Dockerfile

关于docker - 如何设置端口以将静态网站作为 nginx docker 容器运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57018650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com