我最近开始使用 Elastic Beanstalk 来托管我的 Node.JS Express 容器化应用程序,以作为我的 Web 应用程序的后端提供流量。这是一个非常标准的 Express 应用程序,使用
Dockerfile
和 docker-compose.yaml
文件进行容器化。
我们一直面临的问题是,我们的容器经常会随机“死亡”,需要通过 compose 重启策略重新启动,这会导致容器重新启动时流量在一两分钟内失败。我们无法弄清楚发生了什么事。由于业务原因需要切换到 AWS,我们从 GCP 的 Cloud Run 切换到了 Elastic Beanstalk。它在在线时运行良好,但这种随机容器断开连接给我们的最终用户带来了问题。我在下面添加了一些代码和日志。
我们尝试增加实例大小(目前使用
t3.medium
和 4GB RAM)希望能够修复,但没有成功。此时的解决方案是将实例所需计数增加到 2 并祈祷它们不会同时死亡吗?负载均衡器能正确处理这个问题吗?
Dockerfile
FROM node:14 as build
WORKDIR /usr/src/app
COPY . .
RUN yarn install --frozen-lockfile --production
FROM node:14-alpine as main
WORKDIR /usr/src/app
COPY --from=build /usr/src/app .
EXPOSE 5001
# Set the CMD to your handler
CMD [ "yarn", "docker:start" ]
docker-compose.yaml
version: "3.7"
services:
backend-thanos-prod:
container_name: backend-thanos-prod
restart: always
build:
context: .
dockerfile: Dockerfile
env_file:
- ./src/config/.prod.env
ports:
- '80:5001'
volumes:
- .:/usr/src/app
停机时来自
docker-events.log
的日志。
主要就是:
2024-03-02T08:44:00.365632320Z container die
2024-03-02T08:44:00.515722965Z network disconnect
2024-03-02T08:44:00.620752127Z network connect
2024-03-02T08:44:01.633985729Z container start
你找到解决办法了吗?我们有类似的配置并面临同样的问题。再次,没有运气解决它。任何帮助都会很棒!