docker 连接到上游时 nginx 连接被拒绝
docker nginx connection refused while connecting to upstream
我使用闪亮的服务器在端口 3838 上构建一个网络应用程序,当我在我的服务器中使用 nginx 时它运行良好。但是当我在我的服务器上停止 nginx 并尝试使用 docker nginx 时,我发现该站点出现“502-Bad Gate Way”错误并且 nginx 日志显示:
2016/04/28 18:51:15 [error] 8#8: *1 connect() failed (111: Connection refused) while connecting to upstream, ...
我通过这个命令安装 docker-nginx:
sudo docker pull nginx
我的 docker 命令行是这样的(为清楚起见,我添加了一些缩进):
sudo docker run --name docker-nginx -p 80:80
-v ~/docker-nginx/default.conf:/etc/nginx/conf.d/default.conf
-v /usr/share/nginx/html:/usr/share/nginx/html nginx
我在我的主目录中创建了一个名为 'docker-nginx' 的文件夹,将我的 nginx conf 文件移动到该文件夹中,然后删除我在 etc/nginx 目录中的原始 conf 以防万一。
我的 nginx conf 文件如下所示:
server {
listen 80 default_server;
# listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location / {
proxy_pass http://127.0.0.1:3838/;
proxy_redirect http://127.0.0.1:3838/ $scheme://$host/;
auth_basic "Username and Password are required";
auth_basic_user_file /etc/nginx/.htpasswd;
# enhance the performance
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
你必须直接定义上游。目前您的 nginx 无法代理您的网络应用程序。
http://nginx.org/en/docs/http/ngx_http_upstream_module.html
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
我的情况是运行3个容器,一个nginx容器和两个容器化服务。我使用 Nginx 容器作为我的 go 服务的反向代理。
问题是 nginx 容器正在其自己的容器环境中寻找微服务端口。当时我没有意识到这一点,也没有使用 docker-compose.yml。使用 docker-compose.yml 文件时,您指定一个 'depends-on:...' 就是那个
所以当 运行 容器时你应该使用 --net=host
。
有关信息:
这对我有用,我希望它能减轻一些人的痛苦:):
docker run --net=host nginx:someTag
docker run --net=host service1:someTag
我使用闪亮的服务器在端口 3838 上构建一个网络应用程序,当我在我的服务器中使用 nginx 时它运行良好。但是当我在我的服务器上停止 nginx 并尝试使用 docker nginx 时,我发现该站点出现“502-Bad Gate Way”错误并且 nginx 日志显示:
2016/04/28 18:51:15 [error] 8#8: *1 connect() failed (111: Connection refused) while connecting to upstream, ...
我通过这个命令安装 docker-nginx:
sudo docker pull nginx
我的 docker 命令行是这样的(为清楚起见,我添加了一些缩进):
sudo docker run --name docker-nginx -p 80:80
-v ~/docker-nginx/default.conf:/etc/nginx/conf.d/default.conf
-v /usr/share/nginx/html:/usr/share/nginx/html nginx
我在我的主目录中创建了一个名为 'docker-nginx' 的文件夹,将我的 nginx conf 文件移动到该文件夹中,然后删除我在 etc/nginx 目录中的原始 conf 以防万一。
我的 nginx conf 文件如下所示:
server {
listen 80 default_server;
# listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location / {
proxy_pass http://127.0.0.1:3838/;
proxy_redirect http://127.0.0.1:3838/ $scheme://$host/;
auth_basic "Username and Password are required";
auth_basic_user_file /etc/nginx/.htpasswd;
# enhance the performance
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
你必须直接定义上游。目前您的 nginx 无法代理您的网络应用程序。
http://nginx.org/en/docs/http/ngx_http_upstream_module.html
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
我的情况是运行3个容器,一个nginx容器和两个容器化服务。我使用 Nginx 容器作为我的 go 服务的反向代理。
问题是 nginx 容器正在其自己的容器环境中寻找微服务端口。当时我没有意识到这一点,也没有使用 docker-compose.yml。使用 docker-compose.yml 文件时,您指定一个 'depends-on:...' 就是那个
所以当 运行 容器时你应该使用 --net=host
。
有关信息:
这对我有用,我希望它能减轻一些人的痛苦:):
docker run --net=host nginx:someTag
docker run --net=host service1:someTag