[英]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.