mirror of https://github.com/krallin/tini.git
parent
e3d2662820
commit
6e7cdc63bb
4 changed files with 92 additions and 2 deletions
@ -0,0 +1,84 @@ |
|||||||
|
Tini - A tiny but valid `init` for containers |
||||||
|
============================================= |
||||||
|
|
||||||
|
Tini is the simplest `init` you could think of. |
||||||
|
|
||||||
|
All Tini does is spawn a single child (Tini is meant to be run in a container), |
||||||
|
and wait for it to exit all the while reaping zombies and performing |
||||||
|
signal forwarding. |
||||||
|
|
||||||
|
|
||||||
|
Using Tini |
||||||
|
---------- |
||||||
|
|
||||||
|
Add Tini to your container, and make it executable. Then, just invoke Tini |
||||||
|
and pass your program and its arguments as arguments to Tini. |
||||||
|
|
||||||
|
In Docker, you will want to use an entrypoint so you don't have to remember |
||||||
|
to manually invoke Tini: |
||||||
|
|
||||||
|
# Add Tini |
||||||
|
ENV TINI_VERSION v@tini_VERSION_MAJOR@.@tini_VERSION_MINOR@.@tini_VERSION_PATCH@ |
||||||
|
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini |
||||||
|
RUN chmod +x /tini |
||||||
|
ENTRYPOINT ["/tini", "--"] |
||||||
|
|
||||||
|
# Run your program under Tini |
||||||
|
CMD ["/your/program", "-and", "-its", "arguments"] |
||||||
|
# or docker run your-image /your/program ... |
||||||
|
|
||||||
|
Note that you *can* skip the `--` under certain conditions, but you might |
||||||
|
as well always include it to be safe. If you see an error message that |
||||||
|
looks like `tini: invalid option -- 'c'`, then you *need* to add the `--`. |
||||||
|
|
||||||
|
Arguments Tini itself are passed like so: `/tini -v -- /your/program`. |
||||||
|
The only supported argument at this time is `-v`, for extra verbosity (you can |
||||||
|
pass it up to 4 times, e.g. `-vvvv`). |
||||||
|
|
||||||
|
*NOTE*: The binary linked above is a 64-bit dynamically-linked binary. |
||||||
|
|
||||||
|
|
||||||
|
### Existing Entrypoint ### |
||||||
|
|
||||||
|
Tini can also be used with an existing entrypoint in your container! |
||||||
|
|
||||||
|
Assuming your entrypoint was `/docker-entrypoint.sh`, then you would use: |
||||||
|
|
||||||
|
ENTRYPOINT ["/tini", "--", "/docker-entrypoint.sh"] |
||||||
|
|
||||||
|
|
||||||
|
### Size Considerations ### |
||||||
|
|
||||||
|
Tini is a very small file (in the 10KB range), so it doesn't add much weight |
||||||
|
to your container. |
||||||
|
|
||||||
|
|
||||||
|
### Building Tini ### |
||||||
|
|
||||||
|
If you'd rather not download the binary, you can build Tini by just running |
||||||
|
`make` (i.e. there is no `./configure` script). |
||||||
|
|
||||||
|
|
||||||
|
Understanding Tini |
||||||
|
------------------ |
||||||
|
|
||||||
|
After spawning your process, Tini will wait for signals and forward those |
||||||
|
to the child process, and periodically reap zombie processes that may be |
||||||
|
created within your container. |
||||||
|
|
||||||
|
When the "first" child process exits (`/your/program` in the examples above), |
||||||
|
Tini exits as well, with the exit code of the child process (so you can |
||||||
|
check your container's exit code to know whether the child exited |
||||||
|
successfully). |
||||||
|
|
||||||
|
|
||||||
|
Debugging |
||||||
|
--------- |
||||||
|
|
||||||
|
If something isn't working just like you expect, consider increasing the |
||||||
|
verbosity level (up to 4): |
||||||
|
|
||||||
|
tini -v -- bash -c 'exit 1' |
||||||
|
tini -vv -- true |
||||||
|
tini -vvv -- pwd |
||||||
|
tini -vvvv -- ls |
Loading…
Reference in new issue