【问题标题】:How to change Docker config of an already running container?如何更改已运行容器的 Docker 配置?
【发布时间】:2018-01-02 10:46:14
【问题描述】:

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

  • 此选项不持久
  • mail.from 选项不能这样做,只能在运行前设置。

有 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']

【问题讨论】:

    标签: docker docker-compose sentry


    【解决方案1】:

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

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

    更好的方法是通过卷“挂载”您的文件。 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: ...
    

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

    希望这会有所帮助。新的一年万事如意!

    【讨论】:

    • 但是如何在映射卷后重新加载它?因为它仍然加载旧的配置文件。我想保留 postgres 以保留记录的异常。
    • 如果您通过卷正确映射文件,那么通过发出docker-compose restart my_container(或者,简单地说,docker restart my_container,因为它已经存在)新文件被注入到容器中。我每天定期使用这样的工作流程十几次,并以这种方式传播我的更改。
    • 如果您碰巧没有想要的效果,那么可能是您将文件放在了错误的位置。您可以通过docker exec -ti my_container /bin/bash 使用正在运行的容器并在那里找到您的配置文件,然后将volumes 部分的完整路径放在docker-compose.yml 中。
    【解决方案2】:

    这是您可以编辑现有 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. 重启泊坞窗

    【讨论】:

      【解决方案3】:

      如果配置文件存储为 docker configs,那么我发现本指南可以工作...

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

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

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

      Arrggghhh....

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-09
        • 2018-10-09
        • 2015-07-20
        • 1970-01-01
        相关资源
        最近更新 更多