Elastic Beanstalk 上的 NodeJS 多容器 Docker
Posted
技术标签:
【中文标题】Elastic Beanstalk 上的 NodeJS 多容器 Docker【英文标题】:NodeJS Multicontainer Docker on Elastic Beanstalk 【发布时间】:2018-06-20 21:57:54 【问题描述】:我有一个与 mongodb 通信的 NodeJS 应用程序。 这两项服务都应在“多容器”Docker 容器中的 Elastic Beanstalk 上运行。 它接缝mongodb服务运行并工作,但我的NodeJS服务没有启动。它产生空的日志文件并且服务器不可用。
我正在通过 EB CLI 部署容器。通过eb local run
在本地启动一切工作正常,但在实时环境中,nodeJS 部分无法启动。
这是我的 Dockerrun.aws.json:
"AWSEBDockerrunVersion": 2,
"volumes": [
"name": "node",
"host":
"sourcePath": "/var/app/current/node"
],
"containerDefinitions": [
"environment": [
"name": "MONGODB_DATABASE",
"value": "chat_service"
],
"image": "mongo",
"memory": 128,
"name": "mongo"
,
"essential": true,
"image": "node",
"memory": 250,
"name": "node",
"mountPoints": [
"sourceVolume": "node",
"containerPath": "/usr/src/app",
"sourcePath": "",
"readOnly": true
],
"portMappings": [
"hostPort": 80,
"containerPort": 3000
]
]
还有我的 Dockerfile:
FROM node:carbon
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "node", "index.js" ]
我对 Docker 很陌生,所以也许我忘记了一些东西。 CLI 和 AWS EB 控制台中的任何错误均不可见,并且处理部署时不会出现错误。
【问题讨论】:
您是否推送了您的图像并在 JSON 文件中使用它?在我看来,现在休息很好。 @vivekyad4v 在使用 Dockerfile 将代码交付到弹性 beanstalk 时,是否需要将代码作为映像推送到注册表? 是的,你必须这样做。您可以将其推送到 ECR 并在 Beanstalk 中使用它。这个https://github.com/vivekyad4v/aws-elasticbeanstalk-multi-container
可能会让您更好地了解它的工作原理。
【参考方案1】:
我猜你缺少tag
和push
和deploy
你的图片。
在您的注册表中标记您的本地图像 -
$ docker tag node-app:latest a.dkr.ecr.us-east-1.amazonaws.com/node-app:latest
推送你的图片 -
$ docker push a.dkr.ecr.us-east-1.amazonaws.com/node-app:latest
更新 JSON 以使用标记图像 -
"essential": true,
"image": "a.dkr.ecr.us-east-1.amazonaws.com/node-app:latest",
"memory": 250,
部署到 Elasticbeanstalk -
$ eb deploy $APP_ENV -l $BUILD_TAG --timeout 30
你可以找到参考。 JSON 文件 -
https://github.com/vivekyad4v/aws-elasticbeanstalk-multi-container
【讨论】:
以上是关于Elastic Beanstalk 上的 NodeJS 多容器 Docker的主要内容,如果未能解决你的问题,请参考以下文章
Elastic beanstalk 请求上的 Node.js 是 HTTPS,但 express 是作为 HTTP 服务的。这安全吗?
如何从部署在 AWS Elastic beanstalk 上的 node.js express 应用程序获取客户端 IP?
在 Elastic Beanstalk 上扩展 Nginx - Node JS
运行反向代理的 Elastic Beanstalk 上的 TLS