Live data from Hacker News

Perl as PID 1 under Docker

tech-blog.cv-library.co.uk

11–16 of 16 posts

Re: Perl as PID 1 under Docker

#11
Ran into the same issue with the mysql docker container which ultimately bothered me into making my own. Started off experimenting with trapping signals (trap foo INT,..) similar to the article but found this nifty `--gdb` (nowadays `--debug-gdb`) flag to mysqld that enables more signal handling.

Source: `docker pull jbergstroem/mariadb-alpine`

edit: docker should really open the doors for a cleanup/shutdown phase. There's both entrypoint and cmd but not a "exit" command.

Re: Perl as PID 1 under Docker

#12
I wonder if using the --init flag would also fix the docker issue with bash scripts getting in an infinite loop when the script catch signals:

# Run with care...

$ sudo docker run -it docker.io/ubuntu:14.04 /bin/bash -c 'trap x EXIT; x() { echo exit; }; while sleep 1; do echo sleep; done'

^C

[bash enter in infinite loop]

I'm asking because my Fedora 25 install does not include docker 1.13 yet.

Re: Perl as PID 1 under Docker

#13
post #8

I was relieved to see the article mention dumb-init in its conclusion. It's very likely what you want if you're not booting your containers with a full init system, and the README has a thorough explanation of why and how dumb-init works. https://github.com/Yelp/dumb-init

Lately I've found myself using runit a lot in docker containers. In the happy path with a single process, you still gain because it does leave you a bunch of nice hooks when docker exec'ing to shutdown/restart your main process when your developing. In the more common path, I rarely have containers which don't more easily share 1 or 2 tightly coupled support containers (and in general I prefer having `docker run` jus…

>"In the happy path with a single process ..."

What is meant by "the happy path"? I've seen this reference a couple of time now but have not found a clear explanation.

Re: Perl as PID 1 under Docker

#14
post #8

Earlier quoted context omitted.

Lately I've found myself using runit a lot in docker containers. In the happy path with a single process, you still gain because it does leave you a bunch of nice hooks when docker exec'ing to shutdown/restart your main process when your developing. In the more common path, I rarely have containers which don't more easily share 1 or 2 tightly coupled support containers (and in general I prefer having `docker run` jus…

>"In the happy path with a single process ..." What is meant by "the happy path"? I've seen this reference a couple of time now but have not found a clear explanation.

The path where everything goes right/as expected. No error or special handling is needed.

https://en.wikipedia.org/wiki/Happy_path

Re: Perl as PID 1 under Docker

#15

I wonder if using the --init flag would also fix the docker issue with bash scripts getting in an infinite loop when the script catch signals: # Run with care... $ sudo docker run -it docker.io/ubuntu:14.04 /bin/bash -c 'trap x EXIT; x() { echo exit; }; while sleep 1; do echo sleep; done' ^C [bash enter in infinite loop] I'm asking because my Fedora 25 install does not include docker 1.13 yet.

Why don't you use Docker's installation repos [0]? The current version of Community Edition is 17.07, which is a handful of releases past 1.13. As someone that works with a few different customers with different versions of Docker, I'd really recommend upgrading to the latest version.

[0] https://docs.docker.com/engine/installation/linux/docker-ce/...

Re: Perl as PID 1 under Docker

#16

Noticed the same thing when running a node.js application in docker a while ago. Adding a signal handler manually fixed it easily. It was just not expected to be necessary.

Yes, for some reason, loads of people expect containers to behave like virtual machines.
Post reply on HN