我有一个由Yarn管理的monorepo,我想利用Docker缓存层来加速我的构建,这样做我想首先复制package.json和yarn.lock文件,运行yarn install然后复制其余的文件.
这是我的回购结构:
packages/one/package.json
packages/one/index.js
packages/two/package.json
packages/two/index.js
package.json
yarn.lock
Run Code Online (Sandbox Code Playgroud)
这是Dockerfile的感兴趣部分:
COPY package.json .
COPY yarn.lock .
COPY packages/**/package.json ./
RUN yarn install --pure-lockfile
COPY . .
Run Code Online (Sandbox Code Playgroud)
问题是第3个COPY命令没有复制任何东西,我怎样才能达到预期的效果?
给定这样的文件结构:
project root
|-- X.sln
|-- src
| |-- Foo
| | |-- Foo.fsproj
| | |-- Foo.fs
| |-- Bar
| |-- Bar.fsproj
| |-- Bar.fs
|-- test
|-- Baz
|-- Baz.fsproj
Run Code Online (Sandbox Code Playgroud)
我想首先将所有.fsproj文件添加到我的Docker镜像,然后运行命令,然后添加其余文件.我尝试了以下,但当然它不起作用:
COPY X.sln .
COPY **/*.fsproj .
RUN dotnet restore
COPY . .
RUN dotnet build
Run Code Online (Sandbox Code Playgroud)
这个想法是在前两个COPY步骤之后,图像上的文件树是这样的:
working dir
|-- X.sln
|-- src
| |-- Foo
| | |-- Foo.fsproj
| |-- Bar
| |-- Bar.fsproj
|-- test
|-- Baz
|-- …Run Code Online (Sandbox Code Playgroud) (我显然还没有完全掌握 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" \ …Run Code Online (Sandbox Code Playgroud)