如何在docker run中正确包含npm run test命令?

时间:2019-02-20 01:56:42

标签: docker npm travis-ci

我确定我之前已经运行过此命令,但是我在终端中测试了以下命令并收到此错误:

✗ docker run aa1112d76852 npm run test -- --coverage
ERRO[0001] error waiting for container: context canceled
docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"npm\": executable file not found in $PATH": unknown.

我很担心,因为这是除容器ID之外的命令,它将被放置在我的.travis.yml文件中。这次我怎么把它们放在一起的错误在哪里?

这是我的Dockerfile配置:

FROM node:alpine as builder 
WORKDIR '/app'
COPY package.json .
RUN npm install
COPY . .
RUN npm run build


FROM nginx
COPY --from=builder /app/build /usr/share/nginx/html

这是我的docker-compose.yml文件:

version: "3"
services:
  web:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - /app/node_modules
      - .:/app

2 个答案:

答案 0 :(得分:0)

所以这以前可行,因为我是从Dockerfile.dev构建它的,它具有最后一个至关重要的命令:

FROM node:alpine

 WORKDIR '/app'

 COPY package.json .
 RUN npm install

 COPY . .

 CMD ["npm", "run", "start"]

我正在使用的新容器是从Dockerfile构建的,它具有以下配置:

FROM node:alpine as builder 
WORKDIR '/app'
COPY package.json .
RUN npm install
COPY . .
RUN npm run build


FROM nginx
COPY --from=builder /app/build /usr/share/nginx/html

请注意缺少的CMD ["npm", "run", "start"]

所以该命令应该在我的.travis.yml文件中起作用,因为我是用Dockerfile.dev来构建它的,如下所示:

before_install:
  - docker build -t danale/docker-react -f Dockerfile.dev .

答案 1 :(得分:0)

就上下文而言,此问题与有关Udemy的“ Docker和Kubernetes:完整指南”课程有关,在Reddit等上对此进行了很好的推荐。

当您传递生产构建的映像ID(使用Dockerfile创建)而不是Dockerfile.dev的映像ID时,会发生此错误:

root@ubuntu-docker:/home/paul/frontend# docker run USERNAME/docker-react npm run test
docker: Error response from daemon: OCI runtime create failed: 
container_linux.go:345: starting container process caused "exec: \"npm\": executable 
file not found in $PATH": unknown.

root@ubuntu-docker:/home/paul/frontend# docker run USERNAME/docker-react-dev npm run 
test

> frontend@0.1.0 test /app
> react-scripts test

PASS src/App.test.js
  ✓ renders without crashing (92ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        3.794s
Ran all test suites.

我相信是因为Dockerfile.dev包含“ npm run start”行,该行启动开发服务器,然后允许其接收测试命令,而生产版本只是构建应用程序,然后使用nginx为其提供服务。我对React不太熟悉,无法真正了解它。

但是,如果其他任何人(例如OP和我)正在执行此课程并努力解决此错误,我希望这会有所帮助。