node.js - 命令在使用 -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"]
解决方案
是的,如果你npm
直接运行,它不会在 shell 中运行,因此你PATH
不会被设置。
这有效:
ENV PATH="$PATH:/home/newuser/.meteor"
CMD ["npm", "start"]
我想,如果您在切换到npm install -g meteor@latest
之前newuser
运行,那么它可能也可以工作,因为那时流星将全局安装在系统上,而不是仅针对新用户全局安装。但我没有测试过。
推荐阅读
- apache-camel - apache camel中的sftp尝试kerberos身份验证
- php - Codeigniter facebook登录未获取用户数据
- amazon-s3 - SageMaker GetBucketLocation 操作:拒绝访问
- python - 根据条件将列值转换为列表列
- ruby - 如何解密在 ruby 中使用 openssl 创建的文件?
- linux - 向 linux 服务器上的用户授予写入权限以创建 Anaconda env
- python - Pandas GroupBy 并选择特定列中具有最小值的行
- okta - Spinnaker 和 Okta 集成失败
- mysql - 有没有像官方镜像一样工作的 ARM64 的 MySQL Docker 镜像?
- java - 由于通道错误rabbitmq,通道已经关闭