如何在docker上为nginx代理使用不同的端口?

时间:2017-11-30 18:25:27

标签: docker nginx docker-compose

我有一个通过docker-compose运行的两个容器:

version: '3'

services:
  web:
    image: me/web
    container_name: web

  nginx:
    image: me/nginx
    container_name: nginx
    ports:
      - '80:80'
    volumes:
      - ../nginx:/etc/myapp/nginx

我的nginx容器从default.conf的映射卷中复制新的entrypoint.sh

#!/usr/bin/env bash

cp /etc/myapp/nginx/default.conf /etc/nginx/conf.d/default.conf
nginx -g 'daemon off;'

我的自定义default.conf如下:

server {
  listen 80;
  server_name my.website.com;

  location / {
    proxy_pass http://web/;
  }
}

使用此配置,一切都按预期工作。从docker-compose开始后,我可以导航到http://my.website.com并正确访问web容器实例。

但是,现在我想将我的端口更改为默认80以外的其他内容,例如81

services:
  ..

  nginx:
    image: me/nginx
    container_name: nginx
    ports:
      - '81:80'
  ..

现在这不再适用了。每当我访问http://my.website.com:81时,我都会:

  

无法访问此网站

     

my.website.com拒绝连接。

     

ERR_CONNECTION_REFUSED

另一个奇怪的部分是,如果我使用localhost而不是my.website.com,那么在端口81上一切正常。例如:

server {
  listen 80;
  server_name localhost;

  location / {
    proxy_pass http://web/;
  }
}

导航到http://localhost:81正常工作。

我在这里做错了什么?如何将nginx配置为除localhost(我的域)之外的其他内容,并将代理配置在与web容器不同的80端口上?

1 个答案:

答案 0 :(得分:1)

检查my.website.com上的端口81是否已打开,即检查防火墙规则是否已就绪等等