如何破坏 Docker 容器内的所有内容并开始一个新容器?

Vin*_*ent 5 docker dockerfile docker-compose webpack-dev-server yarnpkg

(我显然还没有完全掌握 Docker 的概念,所以当我错误/不准确地使用术语时请纠正我。)

我的存储空间快用完了,所以我跑去docker system prune清理一下我的系统。然而,在那之后不久(也许是立即),我在容器中启动 Webpack 开发服务器后开始遇到分段错误。我现在的猜测是,这是由于一些 npm 包必须重建,但由于一些旧的文物仍然存在,所以没有这样做?如果我在容器外部运行 Webpack 开发服务器,我不会遇到分段错误:

web_1       | [2] Project is running at http://0.0.0.0:8000/
web_1       | [2] webpack output is served from /
web_1       | [2] 404s will fallback to /index.html
web_1       | [2] Segmentation fault (core dumped)
web_1       | [2] error Command failed with exit code 139.
Run Code Online (Sandbox Code Playgroud)

因此,我想知道是否docker system prune真的删除了与我之前运行的 Docker 映像相关的所有内容,或者是否可以进行一些额外的清理。

我的 Dockerfile 如下,其中./stacks/frontend是运行 Webpack 开发服务器的目录(通过yarn start):

FROM node:6-alpine
LABEL Name="Flockademic dev environment" \
      Version="0.0.0"
ENV NODE_ENV=development
WORKDIR /usr/src/app
# Needed for one of the npm dependencies (fibers, when compiling node-gyp):
RUN apk add --no-cache python make g++
COPY ["package.json", "yarn.lock", "package-lock.json*", "./"]
# Unfortunately it seems like Docker can't properly glob this at this time:
# /sf/ask/2496963521/
COPY ["stacks/frontend/package.json", "stacks/frontend/yarn.lock", "stacks/frontend/package-lock*.json", "./stacks/frontend/"]
COPY ["stacks/accounts/package.json", "stacks/accounts/yarn.lock", "stacks/accounts/package-lock*.json", "./stacks/accounts/"]
COPY ["stacks/periodicals/package.json", "stacks/periodicals/yarn.lock", "stacks/periodicals/package-lock*.json", "./stacks/periodicals/"]
RUN yarn install # Also runs `yarn install` in the subdirectories
EXPOSE 3000 8000
CMD yarn start
Run Code Online (Sandbox Code Playgroud)

这是它的部分docker-compose.yml

version: '2'

services:
  web:
    image: flockademic
    build: 
      context: .
      dockerfile: docker/web/Dockerfile
    ports:
      - 3000:3000
      - 8000:8000
    volumes:
    - .:/usr/src/app/:rw
    # Prevent locally installed node_modules from being mounted inside the container.
    # Unfortunately, this does not appear to be possible for every stack without manually enumerating them:
    - /usr/src/app/node_modules
    - /usr/src/app/stacks/frontend/node_modules
    - /usr/src/app/stacks/accounts/node_modules
    - /usr/src/app/stacks/periodicals/node_modules
    links:
      - database
    environment:
      # Some environment variables I use
Run Code Online (Sandbox Code Playgroud)

我对正在发生的事情没有清晰的了解而感到有些沮丧:)任何有关如何完全重新启动(以及我弄错了哪些概念)的建议将不胜感激。

Vin*_*ent 10

所以显然docker system prune还有一些额外的选择,而用核武器摧毁一切的正确方法是docker system prune --all --volumes。对我来说,关键可能是--volumes,因为它们可能会保存必须重建的缓存包。

分段错误现在消失了 \o/