我有一个用于小型Jekyll网站的多阶段Dockerfile。
Dockerfile:
FROM jekyll/minimal AS build
COPY . /srv/jekyll
RUN jekyll build
FROM pierrezemb/gostatic
COPY --from=build /srv/jekyll/_site /srv/http
Docker在最后阶段失败,并显示以下错误:
Step 5/5 : COPY --from=build /srv/jekyll/_site /srv/http
COPY failed: stat /var/lib/docker/overlay2/e6b407b63b9578dd7ae4ccba968fff3f4e28e35e50e887c09319b32ccd548356/merged/srv/jekyll/_site: no such file or directory
如果将第二个FROM和exec
删除到构建容器中,则可以看到文件存在于/srv/jekyll/_site
中。
答案 0 :(得分:1)
我已经拿走了您的dockerfile,并遵循了jekyll quickstart tutorial。由于您选择了jekyll / minimum基本映像,尽管我实际上无法构建您的dockerfile,但将其更改为jekyll / builder会使整个过程进行较小的更改。我正在/ tmp文件夹中构建。
...
up_vote = models.IntegerField(default=0)
down_vote = models.IntegerField(default=0)
...
如果您将代码的GitHub链接发送给我,我可以看看,也许您在某处打了错字?
(这是我的dockerfile,可用于jekyll的教程)
Truncated...
Fetching minima 2.5.0
Installing minima 2.5.0
Bundle complete! 4 Gemfile dependencies, 29 gems now installed.
Bundled gems are installed into `/usr/local/bundle`
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-linux-musl]
Configuration file: /tmp/_config.yml
Source: /tmp
Destination: /tmp/_site
Incremental build: disabled. Enable with --incremental
Generating...
Jekyll Feed: Generating feed for posts
done in 0.507 seconds.
Auto-regeneration: disabled. Use --watch to enable.
Removing intermediate container 10159e9e7776
---> cab3989600a7
Step 5/6 : FROM pierrezemb/gostatic
---> bbc54b2880be
Step 6/6 : COPY --from=build /tmp/_site /srv/http
---> 860f5db9d0f3
Successfully built 860f5db9d0f3
Successfully tagged test:latest
答案 1 :(得分:0)
看起来/ srv / jekyll被定义为父映像中的卷。如果从该映像创建容器,则直接从映像而不是映像创建的容器将导致意外的行为。在构建过程中,如果尝试使用RUN命令更改该目录的内容,则在清理匿名卷时,这些更改将在该run命令的末尾全部丢失。
我建议让该映像的上游创建者从其Dockerfile中删除VOLUME定义,或者分叉存储库并构建自己的不带该卷的文件。您始终可以在运行时定义一个卷,而无需在映像中定义该卷,但是一旦在映像中定义了该卷,则使用该目录的能力将受到该卷的影响。