S7 adapter Docker run

你的 Dockerfile 已经定义了:

dockerfile 复制代码
VOLUME ["/config", "/logs"]
ENTRYPOINT ["python", "/app/app.py"]
CMD ["/config/config.json", "default_string"]

你的 Python 程序需要:

python 复制代码
parser.add_argument("config")
parser.add_argument("rediskey")

也就是运行时等价:

bash 复制代码
python /app/app.py /config/config.json default_string

关键点就是:把宿主机的配置文件挂载到容器的 /config 目录。


一、标准正确的 docker run 方法

假设宿主机配置文件:

text 复制代码
/data/config.json

运行:

bash 复制代码
docker run -d \
-v /data/config.json:/config/config.json \
-v /data/logs:/logs \
myimage

这样容器内:

复制代码
/config/config.json   ← 实际来自宿主机
/logs                 ← 日志目录

你的程序就能读取:

bash 复制代码
/config/config.json

二、更推荐方式(挂整个目录)

生产环境更推荐:

bash 复制代码
docker run -d \
-v /data/config:/config \
-v /data/logs:/logs \
myimage

目录结构:

宿主机:

复制代码
/data/config/config.json

容器:

复制代码
/config/config.json

这样以后增加配置不用改 docker run。

这是最佳实践 ⭐


三、如果要修改 rediskey 参数

可以覆盖 CMD:

例如:

bash 复制代码
docker run -d \
-v /data/config:/config \
-v /data/logs:/logs \
myimage \
/config/config.json myrediskey

实际执行:

bash 复制代码
python /app/app.py /config/config.json myrediskey

因为:

ENTRYPOINT 不变

CMD 被替换。


四、推荐生产运行方式

完整示例:

bash 复制代码
docker run -d \
--name plc_app \
--restart always \
-v /data/plc/config:/config \
-v /data/plc/logs:/logs \
myimage \
/config/config.json plc_process_01

这样:

容器重启自动启动

日志持久化

配置外置。


五、如何确认容器看到文件

进入容器:

bash 复制代码
docker exec -it plc_app bash

查看:

bash 复制代码
ls /config
cat /config/config.json

如果能看到说明 OK。


六、常见错误(90%的人踩坑)

错误1

这样写:

bash 复制代码
-v /data/config.json:/config

这是错误的,因为:

左边是文件

右边是目录。

必须:

bash 复制代码
-v /data/config.json:/config/config.json

错误2 权限问题

如果程序报:

复制代码
Permission denied

执行:

bash 复制代码
chmod 644 /data/config/config.json
chmod 755 /data/config

或者:

bash 复制代码
chmod -R 777 /data/config

(测试用)


七、企业级推荐写法(最干净)

Dockerfile:

dockerfile 复制代码
ENTRYPOINT ["python", "/app/app.py"]

不要 CMD。

运行:

bash 复制代码
docker run -d \
-v /data/config:/config \
-v /data/logs:/logs \
myimage \
/config/config.json plc01

更清晰。


八、更专业的做法(如果是工业PLC项目推荐)

建议改成:

支持环境变量:

python 复制代码
import os

config = os.getenv("CONFIG_FILE","/config/config.json")
rediskey = os.getenv("REDIS_KEY","default")

docker run:

bash 复制代码
docker run -d \
-v /data/config:/config \
-e CONFIG_FILE=/config/config.json \
-e REDIS_KEY=plc01 \
myimage

工业项目基本都这样做。

更安全、更可维护。


实际run

shell 复制代码
docker run -d --name s7_l1 -v /opt/s7/l1/config_192.168.10.101.json:/config/config.json -v /opt/s7/l1/logs:/logs --network waston --restart always s7_adapter:v1.0
相关推荐
whyutianict_vv41 分钟前
云计算 HCIE 认证体系解析:HCIA/HCIP/HCIE 三级科目与知识边界
linux·运维·云计算
桌面运维家8 小时前
旧电脑跑不动课程软件,VDI云桌面怎样接着用?
运维·服务器·虚拟化·pve·vdi·云桌面
zhang133830890758 小时前
传统机械三杯式风速传感器易磨损冻堵?CG-88金属超声波风速风向传感器给出免运维方案
运维·服务器·网络·人工智能·自动化
知已难寻9 小时前
第 2 篇 · 云的地基:服务器、存储、网络三大基础设施
运维·服务器·网络·云原生·云计算·负载均衡·1024程序员节
2601_9498477511 小时前
bcrypt.js 跨端三方库仓颉适配全流程
linux·运维·ubuntu
m0_6399069411 小时前
Linux 操作系统入门:目录结构、服务排查常用命令、Shell 脚本基础
linux·运维·后端
今天重构了吗11 小时前
Linux 上 rm -rf 删错了能找回吗
运维·服务器
KaiwuDB12 小时前
KaiwuDB 分布式集群扩缩容,从原理到完整操作踩坑总结
运维·数据库·分布式
codezzzsleep12 小时前
学术汇报 PPT 自动化生成实战指南
运维·自动化·powerpoint
古法老登瞎折腾12 小时前
大数据智能运维实战(九):让 AI 查日志——找到异常,也保留上下文
java·大数据·运维·人工智能·spring ai·mcp