即使已安装,在 Docker 容器中也找不到“json-server”命令

Posted

技术标签:

【中文标题】即使已安装,在 Docker 容器中也找不到“json-server”命令【英文标题】:"json-server" command not found in Docker container even though it is installed 【发布时间】:2021-07-23 12:03:08 【问题描述】:

我有一个小应用程序,我想在 docker 容器中部署,并且在这个容器中还应该在不同的端口上运行 json-server 来模拟 API。在创建容器期间,安装了 json-server,但是当我尝试在 Dockerfile 中使用 CMD 运行服务器时,我只得到了找不到命令 json-server 的响应。

我的Dockerfile 看起来像这样:

FROM node:10-alpine as build-step    
RUN mkdir -p /app    
WORKDIR /app    
COPY package.json /app   
RUN npm install -g json-server 
RUN npm install    
COPY . /app    
RUN npm run build --prod 
 
# Stage 2
FROM nginx:1.17.1-alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build-step /app/dist/my-app /usr/share/nginx/html

CMD json-server --watch services/mock-api/db.json --routes services/mock-api/routes.json --port 3000 --host 0.0.0.0

我的 .dockerignore 文件应该不相关,但它是:

.git
.firebase
.editorconfig
/node_modules
/e2e
/docs
.gitignore
*.zip
*.md

知道我做错了什么吗?

【问题讨论】:

【参考方案1】:

您的问题是您尝试在多阶段容器构建中安装json-server 依赖项,这意味着您可以单独在该阶段运行相关命令。

为了解决这个问题,您需要直接在第二阶段移动包安装,以便可以访问它以运行命令:

FROM node:10-alpine as build-step    
RUN mkdir -p /app    
WORKDIR /app    
COPY package.json /app   
RUN npm install    
COPY . /app    
RUN npm run build --prod 
 
# Stage 2
FROM nginx:1.17.1-alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build-step /app/dist/my-app /usr/share/nginx/html
RUN npm install json-server 

CMD json-server --watch services/mock-api/db.json --routes services/mock-api/routes.json --port 3000 --host 0.0.0.0

【讨论】:

我对 Docker 还很陌生。所以基本上只是将我的 npm install 命令移动到第二阶段?你能提供一个固定的版本吗? 不幸的是,这不起作用,经过一番研究,我自己修复了它。如果您有兴趣,请参阅下文。 “没有工作”是什么意思?那个时候扔的是什么?很高兴你修好了! 没有找到 npm,因为我使用 nginx 作为基础镜像。 #16 0.402 /bin/sh: npm: 未找到 我会在星期一试一试,谢谢。【参考方案2】:

不幸的是 ale917k 的回答没有用,所以我不得不在经过更多研究后稍微修改一下 Dockerfile:

# Stage 1
FROM node:10-alpine as build-step
RUN mkdir -p /app
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
RUN npm run build --prod

# Stage 2
FROM ubuntu:16.04
USER root
WORKDIR /home/app
COPY package.json /home/app/package.json
RUN apt-get update
RUN apt-get -y install curl gnupg
RUN curl -sL https://deb.nodesource.com/setup_11.x  | bash -
RUN apt-get -y install nodejs
RUN apt update
RUN apt-get -y install nginx
RUN npm i -g json-server

COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build-step /app/dist/my-app/usr/share/nginx/html
CMD json-server --watch /usr/share/nginx/html/assets/mock-api/db.json --routes /usr/share/nginx/html/assets/mock-api/routes.json --no-cors --host 0.0.0.0

非常重要的添加:-host 0.0.0.0

【讨论】:

以上是关于即使已安装,在 Docker 容器中也找不到“json-server”命令的主要内容,如果未能解决你的问题,请参考以下文章

即使已安装 Composer 也找不到 ext-mbstring

msys/MinGW,即使已安装也找不到 libpng,试图编译 xpdf(特别是 pdftopng)

使用包时,即使在同一文件夹中也找不到依赖于其他类的类

ionic 3 - 错误在 Android Studio 中也找不到安装的 Gradle 版本

R即使在安装包后也找不到包

宏碁笔记本电脑触摸板无法使用而且驱动也找不到