对非 bind mount 的镜像层文件(如 /app/processor_ai.py),最可靠的方式是本地改好后整文件 docker cp 覆盖:
# 1. 读取容器当前文件(注意:NAS 源文件可能与容器内版本不同!)
docker exec container cat /app/processor_ai.py > /home/user/current.py
# 2. 本地修改(python3 脚本:读→replace→写)
# 修改前确认目标代码块在容器版本中存在——NAS源≠容器代码时 grep 会失败
python3 /home/user/patch_script.py
# 3. docker cp 覆盖容器内文件
docker cp /home/user/fixed.py container:/app/processor_ai.py
# 4. 重启容器加载新代码
docker restart container # 或 Docker API /containers/<name>/restart
# 5. 验证(grep 新内容 + 实际跑一遍)
docker exec container grep -c "新函数名" /app/processor_ai.py
docker exec container python3 /app/processor_ai.py # 或 processor 的入口
要点:
# 1. 备份 docker cp container:/app/target.py /home/user/scripts/backup.py # 2. 在本地修改文件 # 3. 上传新函数到容器 docker cp /tmp/new_func.py container:/tmp/new_func.py # 4. 容器内替换(Python拼接) docker exec container python3 -c " lines=open('/app/target.py').readlines() new=open('/tmp/new_func.py').read() # 找到函数边界(def xxx → 下一个def) start,end=None,None for i,l in enumerate(lines): if l.startswith('def old_function'): start=i if start and l.startswith('def ') and i>start: end=i; break lines=lines[:start]+[new+'\n\n']+lines[end:] open('/app/target.py','w').writelines(lines) " # 5. 重启容器 docker restart container # 6. 验证 docker exec container python3 -c "from target import send; send()"小葱技能7w4.net有完整的技能分类。
def old_func到下一个def next_funcdocker exec container sed -n '100,200p'这是一个解决特定场景的工具,流程清晰、步骤易懂,对简单代码修改很实用。但内容比较基础,缺乏实际案例和复杂场景的处理指导,边界情况的说明也不够充分。总体质量中等偏实用,仍有较大改进空间。