fix(docker): avoid delayed termination due to signal handling - #456
Open
Jacob McSwain (USA-RedDragon) wants to merge 1 commit into
Open
fix(docker): avoid delayed termination due to signal handling#456Jacob McSwain (USA-RedDragon) wants to merge 1 commit into
Jacob McSwain (USA-RedDragon) wants to merge 1 commit into
Conversation
This commit introduces `tini` (https://github.com/krallin/tini, as seen in Docker >= 1.13) as an init process for the container. This should fix several issues that arise from the current Docker setup. Currently, the container runs `sym_service` via a shell command (`sh -c "/opt/symmetric-ds/bin/sym_service start && tail -F ..."`). This setup causes the shell to become PID 1, and signals such as `SIGTERM` or `SIGINT` sent to the container do not reliably reach `sym_service`. In practice, this leads to: - Ctrl+C in local testing often times out because the service never receives the termination signal. - `docker stop` commands take longer than necessary, as the service cannot shut down gracefully. - Kubernetes deployments experience delayed pod termination.
Jacob McSwain (USA-RedDragon)
requested a review
from a team
as a code owner
November 16, 2025 23:22
Jacob McSwain (USA-RedDragon)
added a commit
to USA-RedDragon/dockers
that referenced
this pull request
Nov 17, 2025
until jumpmindinc/symmetric-ds#456 is merged or otherwise fixed
Contributor
|
Thank you for this suggestion! Will discuss this week with the team and get back to you. |
Contributor
|
Jacob McSwain (@USA-RedDragon) we want to ensure tini allows for a graceful and clean shutdown before termination, especially allowing busy database connections to finish work, return to the pool, and for resource de-allocation. Do you have a way to test this with SymmetricDS and tini to ensure this happens? |
Jacob McSwain (USA-RedDragon)
added a commit
to USA-RedDragon/dockers
that referenced
this pull request
Apr 8, 2026
until jumpmindinc/symmetric-ds#456 is merged or otherwise fixed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This commit introduces
tini(https://github.com/krallin/tini) as an init process for the container. This should fix several issues that arise from the current Docker setup.Currently, the container runs
sym_servicevia a shell command (sh -c "/opt/symmetric-ds/bin/sym_service start && tail -F ..."). This setup causes the shell to become PID 1, and signals such asSIGTERMorSIGINTsent to the container do not reliably reachsym_service. In practice, this leads to:docker stopcommands take longer than necessary, as the service cannot shut down gracefully.Tini (https://github.com/krallin/tini) acts as a minimal init process that properly forwards termination signals to child processes. It is lightweight, widely adopted, and has been included in Docker since version 1.13.
With this change:
sym_servicewill receive termination signals promptly.docker stopbehave predictably.The Dockerfile remains minimal and maintainable, with only a single dependency added.