如何解决从python脚本更新文件后,在docker内部复制的json文件不会更改
我制作了一个python脚本来更新json文件。代码看起来像这样:-
with open('config.json') as config_file:
data = json.load(config_file)
Device_ID = data['id']
Device_API = data['API']
if Device_ID=='':
time.sleep(2)
Device_id = str(input("Enter Device ID:"))
Device_details = {"id": "","API": ""}
Device_API = "https://api.com/"
Device_details["id"] = Device_id
Device_details["API"]=Device_API
Device_ID=Device_id
with open('config.json','w') as json_file:
json.dump(Device_details,json_file)
json_file.close()
然后我写docker文件来制作docker,这里是:-
FROM python:3.6
CMD apt-get install python3-dev
COPY PingStatus.py .
COPY config.json .
CMD python3 PingStatus.py
现在,我使用了“ docker run -i mycode”命令来运行映像。 (我遇到了EOF错误,所以我使用了'-i') 及其运作良好。
我的config.json文件看起来像这样
因此,每当我构建docker并运行docker时,系统都会要求提供Device_Id,但是每当我再次运行docker时,它都会继续要求相同,我无法理解问题。但是我编写了一个代码来更新现有的json文件,然后为什么它不断询问设备ID。
我尝试仅运行脚本,并且脚本可以正常运行。就像它是第一次请求设备ID一样,但是在第一次尝试后,每次都会从json文件中获取设备ID。
我了解我的python脚本在docker image / container内部运行时不会更新json文件。
解决方法
仅在docker容器内更改文件。您可以使用卷来运行程序,这是使文件在容器和主机之间共享的一种方式。您应该从Dockerfile中删除COPY config.json .
行,并使用docker run -iv "$(pwd)/config.json:/config.json:Z" mycode
正如@Hack5 所说和建议的,我们需要在创建 docker 镜像时复制配置文件。我有两个变量需要在配置文件中设置,所以我把它们都设置为常量,它解决了我的问题。谢谢@Hack5。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。