skip to Main Content

I have a very simple Docker container which runs a bash script:

# syntax=docker/dockerfile:1.4

FROM alpine:3
WORKDIR /app

RUN apk add --no-cache 
    curl bash sed uuidgen

COPY demo.sh /app/demo.sh
RUN chmod +x /app/*.sh

CMD ["bash", "/app/demo.sh"]
#!/bin/bash

echo "Test 123.."
sleep 5m
echo "After sleep"

When running the container with docker run <image> the container cannot be stopped with docker stop <name>, it can only be killed.

I tried searching but everything with "bash" and "docker" leads me to managing docker on host with shell scripts.

2

Answers


  1. sleep is an example of an uninterruptible command; your shell never receives the SIGTERM until sleep completes.

    A common workaround is to run sleep in the background, and immediately wait on it, so that it’s the shell built-in wait that’s running when the signal arrives, and wait is interruptible.

    echo "Test 123..."
    sleep 5 & wait
    echo "After sleep"
    
    Login or Signup to reply.
  2. Can you try to add this before the sleep statement ?

    trap "echo Container received EXIT" EXIT
    

    Or do docker stop -t 5 container for example.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search