gpt4 book ai didi

amazon-web-services - 如何使用 Elastic beanstalk 和 Dockerrun.aws.json 正确部署到 AWS?

转载 作者:行者123 更新时间:2023-12-01 19:10:30 37 4
gpt4 key购买 nike

我目前有一个可在本地运行并私有(private)托管在 hub.docker.com 上的 docker 镜像。

容器内有rails、puma、nginx。 Elastic beanstalk 能够从 docker hub 成功拉取镜像,但之后无法执行任何操作。

AWS 有 nginx,并且向我返回此错误。谁能指出我做错了什么?

AWS 错误日志

-------------------------------------
/var/log/nginx/error.log
-------------------------------------
2014/12/27 08:48:34 [emerg] 3161#0: no host in upstream ":80" in /etc/nginx/conf.d/elasticbeanstalk-nginx-docker-upstream.conf:2

更多 AWS 错误日志

nginx: [emerg] no host in upstream ":80" in /etc/nginx/conf.d/elasticbeanstalk-nginx-    docker-upstream.conf:2
nginx: configuration file /etc/nginx/nginx.conf test failed
Failed to start nginx, abort deployment (Executor::NonZeroExitStatus)
at /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/executor-1.0/lib/executor/exec.rb:81:in `sh'
from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/executor-1.0/lib/executor.rb:15:in `sh'
from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/beanstalk-core-1.0/lib/elasticbeanstalk/executable.rb:63:in `execute!'
from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/beanstalk-core-1.0/lib/elasticbeanstalk/hook-directory-executor.rb:29:in `block (2 levels) in run!'
from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/beanstalk-core-1.0/lib/elasticbeanstalk/activity.rb:169:in `call'
from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/beanstalk-core-1.0/lib/elasticbeanstalk/activity.rb:169:in `exec'
from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/beanstalk-core-1.0/lib/elasticbeanstalk/activity.rb:126:in `timeout_exec'
from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/beanstalk-core-1.0/lib/elasticbeanstalk/activity.rb:110:in `block

错误的src文件

upstream docker {
server :80;
keepalive 256;
}

这是我拥有的文件。

Dockerfile

FROM ruby:2.1.5

#################################
# native libs
#################################

RUN apt-get update -qq
RUN apt-get install -qq -y build-essential
RUN apt-get install -qq -y libpq-dev
RUN apt-get install -qq -y nodejs
RUN apt-get install -qq -y npm
RUN apt-get install -qq -y nginx

# Clean up APT when done.
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

#################################
# Install Nginx.
#################################

RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx
ADD config/nginx.conf /etc/nginx/sites-enabled/default

EXPOSE 80

#################################
# Symlinking Nodejs for ubuntu
# -- http://stackoverflow.com/questions/26320901/cannot-install-nodejs-usr-bin-env-node-no-such-file-or-directory
#################################
RUN ln -s /usr/bin/nodejs /usr/bin/node

#################################
# NPM install globals
#################################

RUN npm install bower -g

#################################
# Rails
#################################

RUN mkdir /app
WORKDIR /app
ADD . /app

ENV RAILS_ENV production
ENV SECRET_KEY_BASE test123

RUN bundle install --without development test
RUN bundle exec rake bower:install
RUN bundle exec rake assets:precompile

CMD foreman start -f Procfile

Dockerrun.aws.json

{
"AWSEBDockerrunVersion": "1",
"Authentication": {
"Bucket": "aws-bucket",
"Key": ".dockercfg"
},
"Image": {
"Name": "ericraio/my-image",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "80"
}
],
"Logging": "/var/log/nginx"
}

NGINX

upstream rails_app {
server unix:///app/tmp/sockets/puma.sock fail_timeout=0;
}

server {
# listen 80 deferred;
# server_name domain.tld www.domain.tld;
root /app/public;

try_files $uri/index.html $uri @rails_app;

location @rails_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://rails_app;
}

error_page 500 504 /500.html;
error_page 502 /502.html;
error_page 503 /503.html;

client_max_body_size 4G;
keepalive_timeout 10;
}

最佳答案

问题在于 EC2 上的容器无法运行。 Amazon 使用此命令构建 IP 地址并设置环境变量。

EB_CONFIG_NGINX_UPSTREAM_IP=$(docker inspect `cat $EB_CONFIG_DOCKER_STAGING_APP_FILE` | jq -r .[0].NetworkSettings.IPAddress)

然后亚马逊使用此行来构建 IP 地址。

EB_CONFIG_NGINX_UPSTREAM_PORT=`cat $EB_CONFIG_DOCKER_STAGING_PORT_FILE`

我的端口 80 已暴露,但由于我的容器无法运行,所以我没有主机。这就是您收到此错误的原因。

上游“:80”中没有主机

关于amazon-web-services - 如何使用 Elastic beanstalk 和 Dockerrun.aws.json 正确部署到 AWS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27665906/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com