Skip to content

[Docker] Upgrading from version 1.96.0 to version 1.97.0 results in invalid config #6

Closed

Description

@stormbyte

I have upgraded the docker image from 1.96.0 to 1.97.0
And after starting the image the config was invalid resulting in the shared ip no longer beeing assigned.

When checking the config the following message appeared:

Keepalived rejected it:
Unable to read build config options file

Reverting back to 1.96.0 did result back to a working setup.

Activity

  1. stormbyte commented on Oct 13, 2026

    @stormbyte
    Author

    it seems that the file keepalived.config-opts is not being copied into the mount on upgrade.
    I got the contents from this command

    docker run --rm --entrypoint cat   ghcr.io/avandeputte/haproxy-manager:latest   /etc/keepalived/keepalived.config-opts > ./keepalived.config-opts
    

    but because of the mount overrides /etc/keepalived it can't reach the /etc/keepalived/keepalived.config-opts

  2. self-assigned this
    on Oct 17, 2026
  3. avandeputte commented on Oct 17, 2026

    @avandeputte
    Owner

    Thanks for the precise report and the diagnosis. You found exactly what happened.

    1.97.0 moved the image to Debian 13, whose Keepalived is built reproducibly: the build-options string lives in /etc/keepalived/keepalived.config-opts instead of the binary, and Keepalived refuses to start without it. Docker seeds a named volume from the image only when the volume is created empty, so a volume populated by 1.96.0 hides the new file. Fresh installs never see this; every upgrade did.

    The fix is in #7: the image keeps a copy of the file next to the binary and the entrypoint puts it into /etc/keepalived on every start, so it is there for upgraded volumes and always matches the Keepalived in the image.

    Your workaround (copying the file into the volume) is safe to keep until you pull the fixed image. Keepalived does not check the file's contents, so a copy from another build does no harm, and the entrypoint will overwrite it on the next start anyway.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions