name: python-container-code-patch slug: python-container-code-patch displayName: python-container-code-patch version: 1.0.0 description: 修改執行中Docker容器的Python程式碼。備份→修改→替換→重啟。
對非 bind mount 的映象層檔案(如 /app/processor_ai.py),最可靠的方式是本地改好後整檔案 docker cp 覆蓋:
小蔥技能7w4.net有更新,你可以訪問看下。
# 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 的入口
要點: - 容器重啟後文件保留(docker cp 寫容器可寫層);重建映象會回退 → 同步 NAS 原始檔(見 docker-container-ops 的 /vol1 單掛載模式) - 覆蓋後必須重啟容器,程序不會熱載入舊檔案內容 - 修改 processor_ai.py 時注意可能有多處模板(如系統提示詞 + 生成函式各一處),只改一處會導致部分輸出走舊格式
# 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()"
def old_func到下一個def next_funcdocker exec container sed -n '100,200p'這是一個解決特定場景的工具,流程清晰、步驟易懂,對簡單程式碼修改很實用。但內容比較基礎,缺乏實際案例和複雜場景的處理指導,邊界情況的說明也不夠充分。總體質量中等偏實用,仍有較大改進空間。