Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-54389

Containers with ENTRYPOINT is not started correctly

XMLWordPrintable

      I try to add some service startup to Dockerfile ENTRYPOINT.

      But Jenkins starts container with `cat` CMD and immediately check `cat` in `docker ps` output. As result, there are race condition between `docker ps` and ENTRYPOINT script.

      I created minimalistic example for reproducing this issue on stock Jenkins: https://github.com/bozaro/jenkins-docker-issue

      This example contains:

      1. Dockerfile declaring ENTRYPOINT:
      FROM alpine:latest
      COPY entry.sh /opt/bin/
      ENTRYPOINT ["/opt/bin/entry.sh"]
      CMD ["/bin/sh"] 
      1. ENTRYPOINT script with 3 seconds delay and creating marker file:
      #!/bin/sh -ex
      # Starting very important services...
      sleep 3
      # Service is ready now
      echo > /tmp/ready
      exec "$@"
      1. Jenkinsfile running container with marker file check:
      pipeline {
          agent {
              dockerfile {
                  filename 'Dockerfile'
              }
          }
          stages {
              stage('Check file') {
                  steps {
                      sh "cat /tmp/ready"
                  }
              }
          }
      }
      

      Expected result for Jenkins test:

      1. At least a 3-second delay on pipeline withDockerContainer step
      2. ENTRYPOINT script output in build output;
      3. Green build

      Actual result for Jenkins test:

      1. False positive error message:

      ERROR: The container started but didn't run the expected command. Please double check your ENTRYPOINT does execute the command passed as docker run argument, as required by official docker images (see https://github.com/docker-library/official-images#consistency for entrypoint consistency requirements).

      1. Failed "Check file" step because ENTRYPOINT is not completed yet and /tmp/ready file is not exists;
      2. There are no ENTRYPOINT script output in build.

      Theoretically this issue can be solved if Jenkins would send some random string marker to docker container and wait this marker in container output.

            Unassigned Unassigned
            bozaro Artem V. Navrotskiy
            Votes:
            18 Vote for this issue
            Watchers:
            24 Start watching this issue

              Created:
              Updated: