docker - 即使已安装,在 Docker 容器中也找不到“json-server”命令
问题描述
我有一个小应用程序,我想在 docker 容器中部署,并且在这个容器中还应该在不同的端口上运行json-server来模拟 API。在创建容器期间,安装了 json-server,但是当我尝试使用CMD
in 运行服务器时,Dockerfile
我只得到未找到命令 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
知道我做错了什么吗?
解决方案
您的问题是您试图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
推荐阅读
- bash - 在文件的最后一行添加一个点
- java - 如何让一个红色框出现在变量名之外,以便在我在 java netbeans 中使用它的所有地方更改它?
- angular - 从抽象类继承存在依赖注入问题
- javascript - 反应 - 默认状态
- razor - 剑道网格 - 不显示某些子网格
- spring-data - SpringData findAll(Pageable)上的Mockito不匹配方法签名
- javascript - 尝试渲染表格行元素数组时的不变违规
- javascript - 如何在 Laravel 视图中使用 Javascript 进行字符串连接?
- openstack - 为什么openstack neutron linuxbridge cpu 高?
- c# - 如何从 foreach 循环中排除特定类型的控件?