如何更改已经 运行 容器的 Docker 配置?

How to change Docker config of an already running container?

我已经安装了 Sentry onpremise,经过一段时间的修改,我让它开始工作,并使用命令行将 system.url-prefix 选项更改为正确的 URL。但是仍然存在两个问题:

有 3 个配置文件在运行,但并非所有文件都已注册,这让人感到困惑。

  1. sentry.conf.py

含有

SENTRY_OPTIONS['system.url-prefix'] = 'https://sentry.mydomain.com'
SENTRY_OPTIONS['mail.from'] = 'sentry@mydomain.com'
  1. config.yml

包含

mail.from: 'sentry@mydomain.com'
system.url-prefix: 'https://sentry.mydomain.com'
  1. docker-compose.yml

重新启动容器不会加载新配置。

Related issue。但是我不知道在评论中更改配置后要做什么 (SENTRY_OPTIONS['mail.from'])

您需要使修改后的配置文件在容器内可见。

如果它们内置于映像中(可能通过 Dockerfile 中的 COPY 或 ADD),那么重新启动容器没有帮助,因为您是在旧映像上执行此操作。您应该重建映像,停止旧映像并启动新映像。相当烦人且容易出错的方式。

更好的方法是通过卷 "mount" 您的文件。 Docker 卷可以是单个文件,而不仅仅是目录。您可以在 docker-compose.yml:

中添加 volumes 部分
my_container:
  image: my_image
  volumes:
    sentry.conf.py:/full/path/to/sentry.conf.py/in/the/container
    config.yml:/similar/full/path/to/config.yml
  ports:
    ...
  command: ...

您可能已经为这个特定容器定义了一些卷(例如保存持久数据),然后您只需为您的配置文件添加卷映射。

希望这对您有所帮助。新年快乐!

如果配置文件存储为 docker 配置,那么我发现本指南有效...

https://medium.com/@lucjuggery/about-using-docker-config-e967d4a74b83

  • 基本上将更新添加为新配置
  • 告诉服务删除旧配置,然后添加新配置作为要使用的配置。服务将重新启动
  • 现在您可以删除旧的 docker 配置

这不是很好,如果你想用旧配置标识符命名新配置,你必须再次重复!

呜呜……

这是编辑现有 docker 容器配置的方法:

  1. 停止容器:

    docker stop <container name>

  2. 编辑配置:

    docker run -it -v /var/lib/docker:/var/lib/docker alpine vi $(docker inspect --format='/var/lib/docker/containers/{{.Id}}/config.v2.json' <container name>)

  3. 重启docker