首页 > 解决方案 > 命令在使用 -it 和 bash 运行时有效,但不适用于 Docker 内的 CMD

问题描述

我想使用命令 npm start 在 WSL2 Win 10 上运行一个非常简单的开发 Docker,但它会抛出一个

sh:1:流星:未找到

通过运行时出错docker run -p 3000:3000 meteordev

但是,当我在容器命令行上运行它docker run -it -p 3000:3000 meteordev bash并运行它时,它运行得很好。npm start

我想这与如何为两者配置环境有关,但我无法让它工作,有什么想法吗?

这是完整的 Docker 镜像。如果还有另一个短的,我很乐意放弃我的:

# Mini-Docker
FROM node:14

RUN adduser --disabled-password --shell /bin/bash newuser
RUN chown -R newuser /usr/local/lib/node_modules
RUN chown -R newuser /usr/local/bin
USER newuser

COPY --chown=newuser:newuser ./app /home/newuser/app
RUN chmod -R 700 /home/newuser/app/.meteor/local

WORKDIR /home/newuser/app
RUN npm install -g meteor@latest

EXPOSE 3000
CMD ["npm", "start"]

标签: node.jsdockermeteor

解决方案


是的,如果你npm直接运行,它不会在 shell 中运行,因此你PATH不会被设置。

这有效:

ENV PATH="$PATH:/home/newuser/.meteor"
CMD ["npm", "start"]

我想,如果您在切换到npm install -g meteor@latest 之前newuser运行,那么它可能也可以工作,因为那时流星将全局安装在系统上,而不是仅针对新用户全局安装。但我没有测试过。


推荐阅读