1.在服务器内下载项目

https://github.com/triggerdotdev/jsonhero-web.git

2.进入项目根目录创建dockerfile文件

并在dockerfile中写入以下内容

# 设置工作目录
WORKDIR /app
# 复制 package.json 和 package-lock.json
COPY package*.json ./
# 使用淘宝 npm 镜像源
RUN npm config set registry https://registry.npmmirror.com
# 安装项目依赖
RUN npm install
# 复制整个项目到工作目录
COPY . .
# 构建项目
RUN npm run build
# 暴露服务端口
EXPOSE 3000
# 启动项目
CMD ["npm", "start"]

3.构建docker镜像

  • docker build -t jsonhero-web .

4.创建docker-compose文件

version: '3'
services:
  jsonhero:
    image: jsonhero
    ports:
      - "8787:8787"
    volumes:
      - /opt/json-hero/jsonhero-web/.env:/app/.env
  • docker-compose -f /opt/dockerCompose/jsonhero.yml up -d

附录:出现错误

[root@VM-16-12-centos jsonhero-web]# docker build -t jsonhero-web .
[+] Building 3.6s (2/2) FINISHED                                     docker:default
 => [internal] load build definition from Dockerfile                           0.4s
 => => transferring dockerfile: 372B                                           0.2s
 => ERROR [internal] load metadata for docker.io/library/node:16-alpine        3.0s
------
 > [internal] load metadata for docker.io/library/node:16-alpine:
------
Dockerfile:2
--------------------
   1 |     #使用node.js 官方镜像
   2 | >>> FROM node:16-alpine
   3 |     
   4 |     # 设置工作目录
--------------------
ERROR: failed to solve: node:16-alpine: failed to resolve source metadata for docker.io/library/node:16-alpine: failed to copy: httpReadSeeker: failed open: failed to do request: Get "https://mirror.ccs.tencentyun.com/v2/library/node/blobs/sha256:2573171e0124bb95d14d128728a52a97bb917ef45d7c4fa8cfe76bc44aa78b73?ns=docker.io": dial tcp: lookup mirror.ccs.tencentyun.com on 100.125.1.250:53: no such host

问题原因:docker仓库问题,需修改或添加仓库地址

1.vim /etc/docker/daemon.json
2.
{
  "registry-mirrors": [
    "https://registry.cn-hangzhou.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}
3.systemctl daemon-reload
4.systemctl restart docker

[root@VM-16-12-centos jsonhero-web]# docker logs 16f71c37bc3d

> start
> concurrently "npm run dev" "npm run start:worker"

[0] 
[0] > dev
[0] > concurrently "npm run dev:css" "npm run dev:search" "remix watch"
[0] 
[1] 
[1] > start:worker
[1] > miniflare --env .env --build-command "npm run dev:worker" --watch
[1] 
[0] [2] Watching Remix app in development mode...
[0] [1] 
[0] [1] > dev:search
[0] [1] > esbuild ./app/entry.worker.ts --outfile=./public/entry.worker.js --bundle --format=esm --define:process.env.NODE_ENV='"development"' --watch
[0] [1] 
[0] [0] 
[0] [0] > dev:css
[0] [0] > tailwindcss -i ./styles/tailwind.css -o ./app/tailwind.css --watch
[0] [0] 
[0] [1] [watch] build finished, watching for changes...
[1] 
[1] > dev:worker
[1] > esbuild --define:process.env.NODE_ENV='"development"' --bundle --sourcemap --outdir=dist ./worker
[1] 
[1] 
[1]   dist/worker.js      2.3mb ⚠️
[1]   dist/worker.js.map  3.4mb
[1] 
[1] ⚡ Done in 295ms
[1] [mf:inf] Build succeeded
[0] [0] Browserslist: caniuse-lite is outdated. Please run:
[0] [0]   npx browserslist@latest --update-db
[0] [0]   Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating
[0] [0] 
[0] [0] warn - The `@variants` directive has been deprecated in Tailwind CSS v3.0.
[0] [0] warn - Use `@layer utilities` or `@layer components` instead.
[0] [0] warn - https://tailwindcss.com/docs/upgrade-guide#replace-variants-with-layer
[0] [0] 
[0] [0] Rebuilding...
[1] [mf:err] /app/dist/worker.js:24027
[1]   var q2e = SESSION_SECRET;
[1]             ^
[1] 
[1] ReferenceError: SESSION_SECRET is not defined
[1]     at /app/build/index.js:67:317
[1]     at /app/dist/worker.js:52917:3
[1]     at Script.runInContext (node:vm:141:12)
[1]     at VMScriptRunner.runAsScript (/app/node_modules/@miniflare/runner-vm/src/index.ts:25:12)
[1]     at VMScriptRunner.run (/app/node_modules/@miniflare/runner-vm/src/index.ts:84:12)
[1]     at EventTarget.#reload (/app/node_modules/@miniflare/core/src/index.ts:775:42)
[1]     at EventTarget.getPlugins (/app/node_modules/@miniflare/core/src/index.ts:1017:5)
[1]     at createServer (/app/node_modules/@miniflare/http-server/src/index.ts:369:19)
[1]     at startServer (/app/node_modules/@miniflare/http-server/src/index.ts:476:18)
[1]     at main (/app/node_modules/miniflare/src/cli.ts:111:7)
[1] [mf:err] Unhandled Promise Rejection: /app/dist/worker.js:24027
[1]   var q2e = SESSION_SECRET;
[1]             ^
[1] 
[1] ReferenceError: SESSION_SECRET is not defined
[1]     at /app/build/index.js:67:317
[1]     at /app/dist/worker.js:52917:3
[1]     at Script.runInContext (node:vm:141:12)
[1]     at VMScriptRunner.runAsScript (/app/node_modules/@miniflare/runner-vm/src/index.ts:25:12)
[1]     at VMScriptRunner.run (/app/node_modules/@miniflare/runner-vm/src/index.ts:84:12)
[1]     at EventTarget.#reload (/app/node_modules/@miniflare/core/src/index.ts:775:42)
[1]     at EventTarget.getPlugins (/app/node_modules/@miniflare/core/src/index.ts:1017:5)
[1]     at createServer (/app/node_modules/@miniflare/http-server/src/index.ts:369:19)
[1]     at startServer (/app/node_modules/@miniflare/http-server/src/index.ts:476:18)
[1]     at main (/app/node_modules/miniflare/src/cli.ts:111:7)
[0] [0] Done in 971ms.
[1] [mf:inf] Updated `Request.cf` object cache!
[1] npm run start:worker exited with code 1
[0] [2] 💿 Built in 2.2s
[root@VM-16-12-centos jsonhero-web]# 

试了几个方法都不行

1.在dockerfile 中显示的复制.env文件

2.使用映射 将外部的.env文件映射到内部去

没事了,我的.env 文件中的变量写错了。