如何设置端口以nginx docker容器运行静态网站?
我正在尝试使用docker和nginx运行一个静态网站。我在我的ubuntu机器上使用反向代理。但打电话给我时返回502错误。 我认为正确设置端口有问题,但我看不出我的错误 这是我的Dockerfile如何设置端口以nginx docker容器运行静态网站?,docker,nginx,gitlab,dockerfile,Docker,Nginx,Gitlab,Dockerfile,我正在尝试使用docker和nginx运行一个静态网站。我在我的ubuntu机器上使用反向代理。但打电话给我时返回502错误。 我认为正确设置端口有问题,但我看不出我的错误 这是我的Dockerfile FROM nginx:alpine COPY . /usr/share/nginx/html EXPOSE 3499 …这就是我配置gitlab ci的方式: build: stage: build image: docker:stable script: - docke
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官方图像,因此可以阅读下面的文档
在nginx配置中使用环境变量
nginx开箱即用,在大多数配置块中不支持环境变量。但是,如果需要在nginx启动之前动态生成nginx配置,可以使用envsubs作为解决方案
以下是使用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;'"
因此,如您所见,您需要在图像中做一些工作,以确保您的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
中复制它,您需要添加
-e VIRTUAL_PORT=3499 to your gitlab configuration.
检查jwilder/nginx代理的文档中的多端口部分。
是否可以不使用docker-compose.yml直接在Dockerfile中完成工作?我不能创建一个ngnx conf文件并将其装载为卷或类似的内容吗?是的,您可以在复制步骤中更改该文件,或者在运行期间装载并覆盖它。您可以显示配置文件的示例吗?谢谢。我想复制Dockercompose中的配置文件。但我不明白最小配置文件应该是什么样子。。。
-e VIRTUAL_PORT=3499 to your gitlab configuration.