首页 > 解决方案 > 从 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 文件看起来像这样

json

因此,每当我构建 docker 并运行 docker 时,它都会要求提供 Device_Id,但每当我再次运行 docker 时,它会一直要求相同,我无法理解这个问题。但是我编写了一个代码来更新现有的 json 文件,那么为什么它一直在询问设备 ID。

我尝试只运行脚本并且它工作正常。就像它第一次询问设备 ID 但在第一次尝试后,每次它都会从 json 文件中获取设备 ID。

我知道我的 python 脚本在 docker image/container 中运行时没有更新 json 文件。

标签: pythonjsondockerubuntuupdating

解决方案


该文件仅在 docker 容器内更改。您可以使用卷运行程序,这是在容器和主机之间共享文件的一种方式。您应该COPY config.json .从 Dockerfile 中删除该行,然后运行 ​​docker 实例docker run -iv "$(pwd)/config.json:/config.json:Z" mycode


推荐阅读