Json 在 docker 中复制的文件在从 python 脚本更新文件后未更改

Json file copied inside docker is not changed after updating file from python script

我制作了一个 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 脚本没有更新 json 文件,而 运行ning 在 docker image/container.

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

正如@Hack5 所说和建议的那样,我们需要在创建 docker 图像时复制配置文件。我有两个需要在配置文件中设置的变量,所以我将它们都设置为常量并解决了我的问题。感谢@Hack5。