微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我有一个小应用程序,我想在 docker 容器中部署它,并且在这个容器中还应该在不同的端口上运行 json-server 来模拟 API。在创建容器的过程中安装了 json-server,但是当我尝试在 CMD 中使用 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
,

不幸的是 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?