"json-server" 命令在 Docker 容器中找不到,即使它已安装
"json-server" command not found in Docker container even though it is installed
我有一个小应用程序,我想部署在一个 docker 容器中,并且在这个容器中还应该 运行 一个 json-server 在不同的端口上模拟一个 API.在创建容器的过程中,安装了 json-server 但是当我尝试 运行 在 Dockerfile
中使用 CMD
服务器时,我只得到命令 json-未找到服务器。
我的 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
依赖项,这意味着你可以单独在该阶段 运行 相关命令。
为了解决这个问题,您需要将软件包安装直接移动到第二阶段,以便可以通过 运行ning 命令访问它:
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
.
我有一个小应用程序,我想部署在一个 docker 容器中,并且在这个容器中还应该 运行 一个 json-server 在不同的端口上模拟一个 API.在创建容器的过程中,安装了 json-server 但是当我尝试 运行 在 Dockerfile
中使用 CMD
服务器时,我只得到命令 json-未找到服务器。
我的 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
依赖项,这意味着你可以单独在该阶段 运行 相关命令。
为了解决这个问题,您需要将软件包安装直接移动到第二阶段,以便可以通过 运行ning 命令访问它:
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
.