我把egg.js文件夹上传到阿里云
在本地npm run dev 是正确的运行的,地址是http://127.0.0.1:7001
在项目根目录新建 Dockerfile 文件,编辑内容如下
# 设置基础镜像,如果本地没有该镜像,会从Docker.io服务器pull镜像
FROM node:16.18.0
# 配置环境变量
ENV NODE_ENV production
# 这个是容器中的文件目录
RUN mkdir -p /usr/src/app
# 设置工作目录
WORKDIR /usr/src/app
# 拷贝package.json文件到工作目录
# !!重要:package.json需要单独添加。
# Docker在构建镜像的时候,是一层一层构建的,仅当这一层有变化时,重新构建对应的层。
# 如果package.json和源代码一起添加到镜像,则每次修改源码都需要重新安装npm模块,这样木有必要。
# 所以,正确的顺序是: 添加package.json;安装npm模块;添加源代码。
COPY package.json /usr/src/app/package.json
# 安装npm依赖(使用淘宝的镜像源)
# 如果使用的境外服务器,无需使用淘宝的镜像源,即改为`RUN npm i`。
RUN npm i --production --registry=https://registry.npm.taobao.org
# 拷贝所有源代码到工作目
COPY . /usr/src/app
# 暴露容器端口
EXPOSE 7001
CMD npm start
这段代码 直接参考某大佬的
通过 Docker 部署 nodejs -- egg 项目 - 掘金
只是我改了端口7001,并在阿里云的防火窗开了端口7001
1:在 egg 项目的 package.json 文件中,在 start 启动项中,--daemon 是后台启动。如果使用 docker 容器,需要去除 --daemon
2:进入我的 项目根目录,执行镜像打包命令, 该镜像的名称为myegg
docker image build -t myegg .
然后 docker image ls 能看到一个myegg的镜像
3:最后创建容器
docker run -itd --network=host --name myegg -p 7001:7001 myegg
能够看到名称为myegg的容器 状态是up
打开浏览器 ip地址+7001端口号
可能出现的问题
如果发现容器没有正常启动,可以执行 docker logs -f containerID
命令,查看容器内的执行日志。