You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Dockerfile的COPY --from命令无法复制stain/jena-fuseki:4.0.0的/fuseki目录

无法从stain/jena-fuseki:4.0.0镜像通过COPY --from复制/fuseki目录的问题

问题现象

执行以下Dockerfile构建镜像时:

FROM python:3.8.15-slim
COPY --from=stain/jena-fuseki:4.0.0 /fuseki /fuseki

会报错:

COPY failed: stat fuseki: file does not exist

但通过docker run -it stain/jena-fuseki:4.0.0进入容器后,能确认/fuseki目录存在;且复制其他目录(如/jena-fuseki)的Dockerfile可正常构建:

FROM python:3.8.15-slim
COPY --from=stain/jena-fuseki:4.0.0 /jena-fuseki /jena-fuseki

原因分析

stain/jena-fuseki:4.0.0镜像的/fuseki目录被声明为Docker VOLUME(数据卷)。Docker的VOLUME机制有以下特性:

  • VOLUME声明的目录,其内容不会被包含在镜像的持久化层中,仅在容器运行时由Docker动态创建并挂载卷。
  • 构建阶段的COPY --from只能读取镜像静态层中的内容,无法访问VOLUME目录的内容——即便容器运行时该目录存在,镜像本身并没有存储其实际内容。

可通过docker inspect stain/jena-fuseki:4.0.0验证,输出的Config.Volumes字段中会显示/fuseki的记录。

解决方案

方案1:复制镜像构建时的原始目录

jena-fuseki镜像中/fuseki的内容实际来源于/jena-fuseki目录,直接复制该目录到目标镜像的/fuseki即可:

FROM python:3.8.15-slim
COPY --from=stain/jena-fuseki:4.0.0 /jena-fuseki /fuseki

方案2:自行构建无VOLUME声明的jena-fuseki镜像

  1. 拉取stain/jena-fuseki的Dockerfile源码,删除其中的VOLUME /fuseki行。
  2. 用修改后的Dockerfile构建自定义镜像:
docker build -t my-jena-fuseki:4.0.0 .
  1. 在目标Dockerfile中使用自定义镜像作为源:
FROM python:3.8.15-slim
COPY --from=my-jena-fuseki:4.0.0 /fuseki /fuseki

方案3:运行时挂载卷共享内容

如果不需要在构建阶段将/fuseki内容打包到镜像,可在运行Python容器时通过挂载卷共享jena-fuseki的内容:

# 启动jena-fuseki容器
docker run -d --name fuseki stain/jena-fuseki:4.0.0
# 运行Python容器并挂载fuseki的卷
docker run -it --volumes-from fuseki python:3.8.15-slim

内容的提问来源于stack exchange,提问作者Greenfish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:20:34