Basically, you need PID 1 to exit to stop the container.
Doing kill -s SIGKILL 1 won’t work because PID 1 is protected.
As suggested by @Thomasleveil, you could add code such as trap "exit" SIGINT SIGTERM to the PID 1 script, which will mean the process will exit when sent a kill -s SIGINT 1. I slightly prefer this method to the one you came up with (killing the child process directly) as it gives the parent process a chance to clean up and also the parent process should be able to find the PID of the child process without awk.
The easiest way to handle this is with some sort of supervisor process, and handily Docker now provide one called “tini”. Just run add the argument --init to docker run and Docker will set up tini as PID 1 in the container. A full description is here: https://docs.docker.com/engine/reference/run/#specify-an-init-process