将 react 应用的 docker 镜像部署到 Elastic beanstalk
Posted
技术标签:
【中文标题】将 react 应用的 docker 镜像部署到 Elastic beanstalk【英文标题】:Deploy docker image of react app to Elastic beanstalk 【发布时间】:2021-08-25 00:23:51 【问题描述】:我正在尝试使用 docker 将我的 create-react-app 部署到弹性豆茎 我已经使用 codebuild 和弹性 beanstalk 设置了 codepipeline。
我收到了这个错误
Stop running the command. Error: Dockerfile and Dockerrun.aws.json are both missing, abort deployment
我的 Dockerfile 看起来像这样
FROM tiangolo/node-frontend:10 as build-stage
# Create app directory
# RUN mkdir -p /usr/src/app
# WORKDIR /usr/src/app
WORKDIR /app
# # fix npm private module
# ARG NPM_TOKEN
# COPY .npmrc /app/
#COPY package.json package.json
COPY package*.json /app/
COPY Dockerrun.aws.json /app/
RUN npm install
COPY ./ /app/
# RUN CI=true npm test
RUN npm run build
# FROM nginx:1.15
FROM nginx:1.13.3-alpine
# Install app dependencies
# Stage 1, based on Nginx, to have only the compiled app, ready for production with Nginx
COPY --from=build-stage /app/build/ /usr/share/nginx/html
# Copy the default nginx.conf provided by tiangolo/node-frontend
COPY --from=build-stage /nginx.conf /etc/nginx/conf.d/default.conf
RUN ls
EXPOSE 80
我也有一个 Dockerrun.aws.json
"AWSEBDockerrunVersion": "3",
"Image":
"Name": "something.dkr.ecr.us-east-2.amazonaws.com/subscribili:latest",
"Update": "true"
,
"Ports": [
"ContainerPort": "5000"
],
"Logging": "/var/log/nginx"
我的 buildspec.yml 文件如下所示
version: 0.2
phases:
pre_build:
commands:
- $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)
- REPOSITORY_URI=something.dkr.ecr.us-east-2.amazonaws.com/subscribili
- COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
- IMAGE_TAG=$COMMIT_HASH:=latest
build:
commands:
- docker build -t $REPOSITORY_URI:latest .
- docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
post_build:
commands:
- docker push $REPOSITORY_URI:latest
- docker push $REPOSITORY_URI:$IMAGE_TAG
- printf '["name":"nginx","imageUri":"%s"]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
artifacts:
files: imagedefinitions.json
我确定 buildspec 文件存在一些问题,但我不确定是什么问题。
我已经阅读了所有文档,仍然无法弄清楚如何编写构建规范文件 Docker。 我有什么遗漏吗?
【问题讨论】:
你只有一个神器imagedefinitions.json
?那么其他所有内容,即错误消息中的文件呢?
@Marcin 那里需要什么?
Dockerfile 和 Dockerrun.aws.json 这两个文件需要位于运行命令“COPY Dockerrun.aws.json /app/”的同一目录中。
【参考方案1】:
Dockerfile 和 Dockerrun.aws.json 这两个文件需要位于运行命令“COPY Dockerrun.aws.json /app/”的同一目录中。确保这些文件存在于该目录中,此错误应该消失
【讨论】:
这些文件存在。让我添加我的文件夹结构的屏幕截图。 我认为“Dockerrun.aws.json”文件只允许在 zip 中。你能试试吗?您也可以查看这篇文章:***.com/questions/57648966/… 也许这会有所帮助 如何在 zip 中添加它?我没有在任何地方压缩它我必须吗?如果是的话,我需要压缩什么我已经创建了一个 docker 映像并将其推送到 ecr 存储库,所以我希望弹性 beanstalk 会从那里挑选它。【参考方案2】:“eb deploy”命令从您的代码创建一个 zip 文件。但是,为了使其尽可能小,它只需要提交到 git 的文件。所以,如果你没有提交 Dockerfile 和 Dockerrun 文件,这两个文件将不会包含在 zip 中。
如果您不希望它像这样运行,您可以将 .ebignore 文件添加到您的项目根目录。此文件命令与 gitignore 文件相同;您可以复制从 gitignore 到 ebignore 的所有内容。如果有 .ebignore,cli 将不会检查项目是否已提交到源代码管理。
现在要检查 zip 文件中包含的内容,请在“eb deploy”命令之后查看 .elasticbeanstalk 文件夹。准备好 zip 后,立即将其复制并粘贴到另一个文件夹。注意:cli上传后,原始zip文件将被删除。
【讨论】:
以上是关于将 react 应用的 docker 镜像部署到 Elastic beanstalk的主要内容,如果未能解决你的问题,请参考以下文章