S7 adapter Docker run
你的 Dockerfile 已经定义了VOLUME [/config, /logs] ENTRYPOINT [python, /app/app.py] CMD [/config/config.json, default_string]你的 Python 程序需要parser.add_argument(config)parser.add_argument(rediskey)也就是运行时等价python /app/app.py /config/config.json default_string关键点就是把宿主机的配置文件挂载到容器的 /config 目录。一、标准正确的 docker run 方法假设宿主机配置文件/data/config.json运行dockerrun-d\-v/data/config.json:/config/config.json\-v/data/logs:/logs\myimage这样容器内/config/config.json ← 实际来自宿主机 /logs ← 日志目录你的程序就能读取/config/config.json二、更推荐方式挂整个目录生产环境更推荐dockerrun-d\-v/data/config:/config\-v/data/logs:/logs\myimage目录结构宿主机/data/config/config.json容器/config/config.json这样以后增加配置不用改 docker run。这是最佳实践 ⭐三、如果要修改 rediskey 参数可以覆盖 CMD例如dockerrun-d\-v/data/config:/config\-v/data/logs:/logs\myimage\/config/config.json myrediskey实际执行python /app/app.py /config/config.json myrediskey因为ENTRYPOINT 不变CMD 被替换。四、推荐生产运行方式完整示例dockerrun-d\--nameplc_app\--restartalways\-v/data/plc/config:/config\-v/data/plc/logs:/logs\myimage\/config/config.json plc_process_01这样容器重启自动启动日志持久化配置外置。五、如何确认容器看到文件进入容器dockerexec-itplc_appbash查看ls/configcat/config/config.json如果能看到说明 OK。六、常见错误90%的人踩坑错误1这样写-v/data/config.json:/config这是错误的因为左边是文件右边是目录。必须-v/data/config.json:/config/config.json错误2 权限问题如果程序报Permission denied执行chmod644/data/config/config.jsonchmod755/data/config或者chmod-R777/data/config(测试用)七、企业级推荐写法最干净DockerfileENTRYPOINT [python, /app/app.py]不要 CMD。运行dockerrun-d\-v/data/config:/config\-v/data/logs:/logs\myimage\/config/config.json plc01更清晰。八、更专业的做法如果是工业PLC项目推荐建议改成支持环境变量importos configos.getenv(CONFIG_FILE,/config/config.json)rediskeyos.getenv(REDIS_KEY,default)docker rundockerrun-d\-v/data/config:/config\-eCONFIG_FILE/config/config.json\-eREDIS_KEYplc01\myimage工业项目基本都这样做。更安全、更可维护。实际rundockerrun-d--names7_l1-v/opt/s7/l1/config_192.168.10.101.json:/config/config.json-v/opt/s7/l1/logs:/logs--networkwaston--restartalways s7_adapter:v1.0