- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个 Rails 应用程序,我正在设置应用程序以在 docker 上部署,并使用 Nginx 作为网络服务器。但是,我在为应用程序设置 Nginx 和 Docker 时遇到问题。
我在运行 docker-compose up
时不断收到此错误:
nginx: [emerg] host not found in upstream "app:3000" in /etc/nginx/conf.d/mailing_list.conf
这是我的 docker-compose.yml
文件:
version: '3'
services:
app:
build:
context: .
dockerfile: ./docker/${RAILS_ENV}/Dockerfile
depends_on:
- database
ports:
- "3000:3000"
restart: always
volumes:
- .:/app
- gem-cache:/usr/local/bundle/gems
- node-modules:/app/node_modules
env_file:
- .env
environment:
RAILS_ENV: ${RAILS_ENV}
RACK_ENV: ${RACK_ENV}
database:
image: postgres:12.1
expose:
- "5432"
restart: always
env_file:
- .env
environment:
POSTGRES_USER: ${DATABASE_USER}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
POSTGRES_DB: ${DATABASE_NAME}
POSTGRES_HOST_AUTH_METHOD: ${DATABASE_HOST}
volumes:
- postgres-data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
nginx:
build:
context: .
dockerfile: ./docker/nginx/Dockerfile
depends_on:
- app
ports:
- "8080:8080"
restart: always
volumes:
- .:/app
- nginx-config:/etc/nginx
- nginx-log:/var/log/nginx
volumes:
gem-cache:
nginx-config:
nginx-log:
node-modules:
postgres-data:
这是我的 nginx.conf
文件:
upstream app {
server app:3000;
}
server {
listen 8080;
listen [::]:8080;
root app/public;
index index.html index.htm;
server_name localhost;
location /app {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://app;
}
}
我尝试了很多解决方案,但似乎都没有用。
我在运行 docker-compose up
时不断收到此错误:
nginx: [emerg] host not found in upstream "app:3000" in /etc/nginx/conf.d/mailing_list.conf
任何形式的帮助将不胜感激。谢谢。
最佳答案
经过几个小时的研究和试验,我终于明白了这一点。
问题与我的 docker-compose.yml
和 my_app.conf
(Nginx 配置)文件中的错误配置有关。
这是正确的配置:
Nginx
的 Dockerfile
:
FROM nginx:1.18.0
LABEL maintainer="promisepreston@gmail.com"
# Set working directory
WORKDIR /app
# Copy over static assets
COPY public public/
# Copy over entrypoint
COPY docker/entrypoints/nginx-entrypoint.sh /usr/local/bin/nginx-entrypoint.sh
# Copy Nginx config template
RUN rm /etc/nginx/conf.d/default.conf
COPY docker/nginx/my_app.conf /etc/nginx/conf.d/my_app.conf
# Nginx init
RUN ["chmod", "+x", "/usr/local/bin/nginx-entrypoint.sh"]
ENTRYPOINT ["/usr/local/bin/nginx-entrypoint.sh"]
docker-compose.yml
文件(这包含我的app
、database
和Nginx
配置) :
version: '3'
services:
app:
build:
context: .
dockerfile: ./docker/${RAILS_ENV}/Dockerfile
depends_on:
- database
expose:
- "3000"
restart: always
volumes:
- .:/app
- gem-cache:/usr/local/bundle/gems
- node-modules:/app/node_modules
env_file:
- .env
environment:
RAILS_ENV: ${RAILS_ENV}
RACK_ENV: ${RACK_ENV}
database:
image: postgres:12.1
expose:
- "5432"
restart: always
env_file:
- .env
environment:
POSTGRES_USER: ${DATABASE_USER}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
POSTGRES_DB: ${DATABASE_NAME}
POSTGRES_HOST_AUTH_METHOD: ${DATABASE_HOST}
volumes:
- postgres-data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
nginx:
build:
context: .
dockerfile: ./docker/nginx/Dockerfile
depends_on:
- app
ports:
- "8084:80"
# - "443:443"
restart: always
volumes:
- .:/app
volumes:
gem-cache:
node-modules:
postgres-data:
Nginx
的 my_app.conf
文件:
upstream rails_app {
server app:3000;
}
server {
listen 80;
# define your domain
server_name localhost;
# define the public application root
root /app/public;
index index.html index.htm;
# define where Nginx should write its logs
access_log /app/log/nginx.access.log;
error_log /app/log/nginx.error.log;
# deny requests for files that should never be accessed
location ~ /\. {
deny all;
}
location ~* ^.+\.(rb|log)$ {
deny all;
}
# serve static (compiled) assets directly if they exist (for rails production)
location ~ ^/(assets|images|javascripts|stylesheets|swfs|system)/ {
try_files $uri @rails;
access_log off;
gzip_static on; # to serve pre-gzipped version
expires max;
add_header Cache-Control public;
# Some browsers still send conditional-GET requests if there's a
# Last-Modified header or an ETag header even if they haven't
# reached the expiry date sent in the Expires header.
add_header Last-Modified "";
add_header ETag "";
break;
}
# send non-static file requests to the app server
location / {
try_files $uri @rails;
}
location @rails {
proxy_pass http://rails_app;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /app/public;
}
}
Nginx
的nginx-entrypoint.sh
文件:
#!/bin/sh
set -e
# Allow nginx to stay in the foreground
# so that Docker can track the process properly
nginx -g 'daemon off;'
注意:
RAILS_ENV
、RACK_ENV
等变量,您可能不需要这些变量。Nginx
的 WORKDIR
是 /app
,因此将它指定为 Nginx 下的卷很重要
像我一样在 docker-compose.yml
文件中配置。Nginx
映射到主机上的端口 8084
,您可以随意将其映射到主机上的任何可用端口。就这些。
希望对您有所帮助
关于ruby-on-rails - Docker:Nginx - [emerg] 在上游找不到主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61639764/
I'm getting this error after running sudo nginx command我在运行sudo nginx命令后收到此错误 nginx: [emerg] bin
我在我的一个子域上生成了 SSL 证书。然后我尝试 delete/revoke证书使用命令certbot delete .弹出一个小终端菜单,询问我要删除什么证书。我删除了我想删除的那个。现在,当运行
我正在设置新服务器。我选择的 Web 服务器是 NGINX。我想添加域名(例如 example.com)作为虚拟主机。我已经有另外两个域,它工作正常,但是当我尝试添加上述域并启动服务器时,它给了我:
我正在尝试通过集群中的Nginx容器将请求反向代理到共享相同覆盖网络的独立容器。 tldr;我收到以下错误: 2018/03/15 19:00:35 [emerg] 1#1: invalid host
我已经重新配置了 nginx,但无法使用以下配置重新启动它: server { listen 80; server_name www.example.com; return 3
我第一次尝试在 EC2 上使用 Rubber 进行设置(complete_passenger_nginx_postgresql)。我更改了配置文件中的一系列设置,使其适用于不同的 AMI(Ubuntu
我正在为 RHEL 7 中的反向代理配置 nginx,这是我的配置。 server { listen 8080; server_name localhost.com; location
我正在尝试在 Digital Ocean 的 Droplet 上的 Ubuntu 上配置 Nginx 服务器。 当我运行 sudo nginx -t 时,出现错误 [emerg] unknown "r
当我尝试重新启动Nginx并在控制台中写入此命令时 nginx -t 我有一个错误: nginx: [emerg] a duplicate default server for 0.0.0.0:80
如何创建 HTML 链接到紧急号码,如 911或 112 ? RFC says The phone number can be represented in either global or loca
在X-WAF部署中,您需要创建新的nginx配置文件。但是在测试nginx配置时,发现错误,nginx无法启动。 我指的是http://blog.51cto.com/14071176/2318054
我正在尝试在 nginx 中重写 url,下面是我的示例代码: server { listen 80; server_name example.com; root /ful
这是我的第一个问题!在这个网站上:Is there a kdevelop version that i can install on windows?在其中一个答案中,需要“运行 emerge qt、
由于/etc/fstab 中有错误的代码行,我无法启动我的 Linux 机器。目前我的机器将尝试启动并无限循环消息“欢迎使用紧急模式!...”。我无法进入控制台或登录。 在启动屏幕上点击退出并进入救援
我正在构建一个 Rails 应用程序,我正在设置应用程序以在 docker 上部署,并使用 Nginx 作为网络服务器。但是,我在为应用程序设置 Nginx 和 Docker 时遇到问题。 我在运行
当我点击其中一个建议时,下拉列表只消失,但听不到鼠标点击事件, 鼠标焦点和键盘事件等其他事件完美运行。 在我的输入代码结构中,组件通常位于另一个组件内,如下面的部分代码所示: 父组件 class Si
最近为了制作一个Docker镜像,在本地电脑上通过虚拟机安装了CentOS,顺便通过宝塔面板安装了阿里系的WEB环境。安装好以后Nginx始终无法启动,报错:nginx: [emerg] inval
几周来,我一直在使用 Android 模拟器、命令行和 Intellij,运行 ApiDemos 和我自己的应用程序,没有任何问题。 现在,没有任何异常或消息表明模拟器将只运行紧急调用应用程序的原因,
我开发了一个应用程序来跟踪用户位置(后台模式)并获得政府警察服务的用户许可。 根据苹果人机界面指南: 4.3 Apps that use location-based APIs for emergen
我在 mac OSX Snow Leopard 上安装了 Git,我尝试编辑我的 merge 和差异工具以使用 kdiff3 而不是 emerge。 但是当我尝试使用它时,它不会启动 kdiff 的
我是一名优秀的程序员,十分优秀!