繁体   English   中英

Docker 平台上的 elasticbeanstalk:反应应用程序的 502 Bad Gateway

[英]elasticbeanstalk on the Docker platform: 502 Bad Gateway for the react app

我有一个从 Dockerfile.dev 部署的虚拟反应应用程序:

FROM node:alpine AS builder
WORKDIR '/app'
COPY package.json .
RUN npm install
COPY . .
RUN npm run build

FROM nginx
EXPOSE 80
COPY --from=builder /app/build /usr/share/nginx/html

在使用 TravisCI 推送到 GitHub 后立即部署到 elasticbeanstalk:

sudo: required
services:
  - docker

before_install:
  - docker build -t name/docker-react -f Dockerfile.dev .

script:
  - docker run -e CI=true name/docker-react npm run test

deploy:
  provider: elasticbeanstalk
  region: 'us-east-1'
  app: 'docker'
  env: 'Docker-env'
  bucket_name: 'elasticbeanstalk-us-east-1-709516719664'
  bucket_path: 'docker'
  on:
    branch: main
  access_key_id: $AWS_ACCESS_KEY
  secret_access_key: $AWS_SECRET_KEY

该应用程序已成功部署到 EB,但在我访问它时立即显示 502 Bad Gateway(通过单击 AWS EB 中的应用程序链接)。 增强的运行状况概览报告:进程默认情况已持续 18 小时 (Target.FailedHealthChecks)。

Docker-env EC2 实例正在运行,在允许所有传入连接后我可以正常连接: 在此处输入图像描述

我可以在本地使用 Dockerfile.dev 构建我的应用程序,没有任何问题:

docker build -t name/docker-react -f Dockerfile.dev .
 => => naming to docker.io/name/docker-react  

docker run -p 3000:3000 name/docker-react 

在此处输入图像描述

AWS 很难使用“.”。 文件夹名称,更喜欢长格式。/

尝试将COPY指令编辑为COPY package*.json./

并尝试删除命名的构建器。 默认情况下,这些阶段没有命名,您可以通过它们的 integer 编号来引用它们,第一个 FROM 指令从 0 开始。

您的 Dockerfile 应如下所示:

FROM node:alpine
WORKDIR '/app'
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM nginx
EXPOSE 80
COPY --from=0 /app/build /usr/share/nginx/html

你应该有一个 docker-compose.yml,只要确保你在里面有正确的端口映射:示例:

services:
    web-service:
        build:
            context: .
            dockerfile: Dockerfile.dev
        ports:
            - "80:3000" # outside:inside container

最后必须编辑您的 TravisCI 配置。 secret_acces_key 有一个“S”

...
    access_key_id: $AWS_ACCESS_KEY
    secret_acces_key: $AWS_SECRET_KEY

Nginx 默认端口为 80,AWS 只检查 docker-compose.yml 以有效管理资源,只需在该文件中进行正确的端口映射即可

version: '3'
services:
  web:
    build:
      context: .
      dockerfile: Dockerfile.dev 
    ports:
      - "80:3000"
    volumes:
      - /app/node_modules
      - .:/app

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM