mirror of
https://github.com/fosrl/pangolin.git
synced 2026-05-06 00:22:42 -05:00
[GH-ISSUE #1784] A single Docker label error prevents all from updating #2004
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @sippeangelo on GitHub (Oct 30, 2025).
Original GitHub issue: https://github.com/fosrl/pangolin/issues/1784
Originally assigned to: @oschwartz10612 on GitHub.
Describe the Bug
I've been using the Docker socket functionality and it's really cool! However, it seems that if ANY Docker container has a label that Pangolin doesn't like, it prevents all other Docker services from being parsed by Pangolin.
I was updating a port number on an unrelated service (
service-2), and I was puzzled why the port number wouldn't update in Pangolin even though I changed the label and brought the service up again. After a while I found this in the Pangolin log:The problem seemed to be that the
portlabel NEEDED to be present onservice-2(I'm guessing because the container didn't expose one that it could pick up automatically?), but this madeservice-1unable to change. I added theportlabel toservice-2and that madeservice-1update, now that the Pangolin log was error free.Environment
To Reproduce
See description
Expected Behavior
Unrelated label configuration errors shouldn't affect other services.
@AstralDestiny commented on GitHub (Nov 4, 2025):
Can you show your exact labels by chance? redacting for any secrets? but retain the labels as much as possible?
@sippeangelo commented on GitHub (Nov 5, 2025):
Here's a minimal repro:
testserviceis a Docker image that doesn't "EXPOSE" any port. If I leave the Pangolin port tag commented out ontestservice, I receive the error in the Pangolin logs, and any port update I do to thewhoamiservice now seems to be ignored by Pangolin until the "error" ontestserviceis fixed.[error]: Failed to update database from config: Error: Validation error: Required at "proxy-resources.testservice.targets[0].port"I haven't tested if this applies to any other error causing tags, but it feels likely.
./docker-compose.yml
./testservice/Dockerfile
@oschwartz10612 commented on GitHub (Nov 8, 2025):
Closing this because it is by design. Perhaps it is confusing as you mention in this post but all of the labels are added together each time it is applied in newt. This means that the whole docker compose is the blueprint and blueprints fail if any one part of it is bad to prevent undefined behavior. It would not be possible to silo containers I think because technically you could define things for another resource on a container because it is just referenced by ID so we have to join them all together.
Open to suggestions if this feels incorrect.
@sippeangelo commented on GitHub (Nov 10, 2025):
The fact that completely unrelated configuration mistakes can bring down ALL unrelated services on the same Docker socket is really unfortunate and prevents this feature from being used in any realistic production scenario.
I get that we can't completely silo them, but I don't see why one configuration mistake in an unrelated manually namespaced tag need to bring down all the others! Especially since the fault is very insidious in how there is no clear way to see these errors without checking the Pangolin logs, and it might not be discovered until way down the line until you wonder why some other updated service is suddenly just down.
@oschwartz10612 commented on GitHub (Nov 22, 2025):
Ill take a deeper look
@LunarECL commented on GitHub (Mar 8, 2026):
Found the root cause.
ConfigSchema.safeParse()inapplyBlueprint.tsvalidates all resources at once, so one bad resource (like a missing port on a container with no EXPOSE) takes down the whole blueprint. Everything else that's perfectly fine fails too.Going to add per-resource validation on the Docker blueprint side so we can just skip the broken ones with a warning instead of blowing up entirely. Cross-resource checks stay as-is. Will throw up a draft PR soon.