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

Docker容器卷挂载文件找不到问题求助

问题解决指南

1. 直接修复文件找不到的问题

你当前的核心问题是宿主机文件路径与容器挂载路径不匹配:

  • 宿主机的Memory_Map_File.c存放在/opt/P01_SH/_Library,但你执行的docker run命令仅挂载了当前目录$(pwd)到容器内的/opt/P01_SH/Dockerfiles,容器内的脚本自然找不到不在挂载范围内的文件。
  • 调整挂载命令,将包含目标文件的宿主机目录挂载到容器内脚本期望的路径:
    如果脚本在容器内期望从/opt/P01_SH/_Library读取文件,执行以下命令:
    docker run -v /opt/P01_SH/_Library:/opt/P01_SH/_Library -it calc:01
    
    若脚本内的文件路径是相对/opt/P01_SH/Dockerfiles的,则需将宿主机/opt/P01_SH/_Library挂载到容器内对应的相对路径,或直接修改脚本中的文件路径。

2. 明确Bind Mount与Docker Volume的区别

  • Bind Mount(绑定挂载):直接将宿主机的具体目录/文件挂载到容器,使用-v 宿主机路径:/容器路径格式。优点是宿主机与容器文件实时同步,适合开发场景;缺点是依赖宿主机路径结构,换环境易失效。
  • Docker Volume(命名/匿名卷):由Docker统一管理的存储目录(默认位于宿主机/var/lib/docker/volumes/下),使用-v 卷名:/容器路径格式。优点是不依赖宿主机路径,适合生产环境持久化数据;缺点是宿主机无法直接通过常规路径访问,需用docker cp或docker volume inspect操作。

你之前用命名卷无效,是因为命名卷默认是空的,不会自动同步宿主机文件。若要使用命名卷,需手动将宿主机文件复制到卷中:

# 创建命名卷
docker volume create calc-lib
# 通过临时容器将宿主机文件复制到卷内
docker run --rm -v /opt/P01_SH/_Library:/source -v calc-lib:/target ubuntu:22.04 cp -r /source/. /target/
# 使用命名卷启动容器
docker run -v calc-lib:/opt/P01_SH/_Library -it calc:01

3. 额外验证步骤

  • 确认Docker_Entry_Point.sh中的文件路径是容器内的路径,而非宿主机路径。
  • 挂载后可先进入容器验证文件是否存在:
    docker run -v /opt/P01_SH/_Library:/opt/P01_SH/_Library -it calc:01 bash
    # 在容器内执行以下命令检查文件
    ls /opt/P01_SH/_Library
    
  • 检查挂载目录权限:确保容器内运行的用户拥有挂载目录的访问权限,必要时用--user指定用户,或调整宿主机目录权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:38:17