【问题标题】:Nuxt js is starting in Linux vm but not in Docker container, why?Nuxt js 在 Linux vm 中启动,但不在 Docker 容器中,为什么?
【发布时间】:2020-07-18 03:22:57
【问题描述】:

从适用于 Linux 的 Windows 子系统启动 nuxt 应用程序和在 Docker 中启动同一个应用程序时,我得到了不同的结果。我已经对其他一些应用程序进行了 docker 化,所以我对这个概念并不完全陌生。

WSL

正在监听连接

Docker

给了我一个例外

FROM node:12.16

ENV APP_ROOT /code

RUN mkdir ${APP_ROOT}
WORKDIR ${APP_ROOT}
#ADD . ${APP_ROOT}

RUN npm install
RUN npm build

EXPOSE 3000
ENV HOST 0.0.0.0
#CMD npm run dev
CMD tail -f /dev/null

0 info it worked if it ends with ok
1 verbose cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'run', 'dev' ]
2 info using npm@6.13.4
3 info using node@v12.16.1
4 verbose run-script [ 'predev', 'dev', 'postdev' ]
5 info lifecycle yourmonitor@1.0.0~predev: yourmonitor@1.0.0
6 info lifecycle yourmonitor@1.0.0~dev: yourmonitor@1.0.0
7 verbose lifecycle yourmonitor@1.0.0~dev: unsafe-perm in lifecycle true
8 verbose lifecycle yourmonitor@1.0.0~dev: PATH: /usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/code/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
9 verbose lifecycle yourmonitor@1.0.0~dev: CWD: /code
10 silly lifecycle yourmonitor@1.0.0~dev: Args: [
10 silly lifecycle   '-c',
10 silly lifecycle   'cross-env NODE_ENV=development nodemon server/index.js --watch server'
10 silly lifecycle ]
11 info lifecycle yourmonitor@1.0.0~dev: Failed to exec dev script
12 verbose stack Error: yourmonitor@1.0.0 dev: `cross-env NODE_ENV=development nodemon server/index.js --watch server`
12 verbose stack spawn ENOENT
12 verbose stack     at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:48:18)
12 verbose stack     at ChildProcess.emit (events.js:311:20)
12 verbose stack     at maybeClose (internal/child_process.js:1021:16)
12 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5)
13 verbose pkgid yourmonitor@1.0.0
14 verbose cwd /code
15 verbose Linux 4.19.76-linuxkit
16 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "dev"
17 verbose node v12.16.1
18 verbose npm  v6.13.4
19 error code ELIFECYCLE
20 error syscall spawn
21 error file sh
22 error errno ENOENT
23 error yourmonitor@1.0.0 dev: `cross-env NODE_ENV=development nodemon server/index.js --watch server`
23 error spawn ENOENT
24 error Failed at the yourmonitor@1.0.0 dev script.
24 error This is probably not a problem with npm. There is likely additional logging output above.
25 verbose exit [ 1, true ]

【问题讨论】:

    标签: docker npm nuxt.js


    【解决方案1】:

    问题似乎是在创建 docker 映像时 package.json 文件中的拼写错误。

    你在 docker 之外的脚本下面运行。

    cross-env NODE_ENV=development nodemon server/index.js --watch server

    在 docker 内运行以下脚本。

    cross-env NODE_ENV=development nodemon server/index.js --watch aerver

    服务器 -> aerver

    您应该在构建 docker 镜像时检查 package.json。

    还有一点建议。您应该在处理容器时使用 dockers 环境变量,而无需在容器中使用类似跨环境的包,这显然会增加调试问题的难度。

    所以你的 dockerfile 应该是这样的。

    FROM node:12.16
    
    ENV APP_ROOT /code
    
    ENV NODE_ENV development
    
    RUN mkdir ${APP_ROOT}
    WORKDIR ${APP_ROOT}
    #ADD . ${APP_ROOT}
    
    RUN npm install
    RUN npm build
    
    EXPOSE 3000
    ENV HOST 0.0.0.0
    CMD npm run dev
    

    你在 package.json 中的开发脚本应该是这样的。

    nodemon 服务器/index.js --watch 服务器

    编辑:由于屏幕不好而删除了错误的意见。

    【讨论】:

    • 非常感谢您帮助我。但是,我使用 docker-compose 来挂载与在 WSL 中使用的完全相同的文件夹,这意味着不应该有任何代码差异。除非我错过了什么,否则我认为这是别的东西。我还检查了配置或代码中的任何地方都没有“aerver”。
    • 对不起,我的屏幕问题很糟糕。从屏幕截图中,我读错了字母。您是否在没有跨环境的情况下尝试过?错误是否与 dockers 环境变量一起存在?只是好奇。
    猜你喜欢
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 2023-01-18
    • 2020-06-11
    • 2019-11-14
    相关资源
    最近更新 更多