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

如何设置端口以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

我正在尝试使用docker和nginx运行一个静态网站。我在我的ubuntu机器上使用反向代理。但打电话给我时返回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官方图像,因此可以阅读下面的文档

在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.