[JIRA] (JENKINS-54389) Containers with ENTRYPOINT is not started correctly

2 views
Skip to first unread message

bozaro@yandex.ru (JIRA)

unread,
Nov 1, 2018, 4:36:02 AM11/1/18
to jenkinsc...@googlegroups.com
Artem V. Navrotskiy created an issue
 
Jenkins / Bug JENKINS-54389
Containers with ENTRYPOINT is not started correctly
Issue Type: Bug Bug
Assignee: Unassigned
Components: docker-workflow-plugin
Created: 2018-11-01 08:35
Priority: Minor Minor
Reporter: Artem V. Navrotskiy

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. 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.

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

Add Comment Add Comment
 
This message was sent by Atlassian Jira (v7.11.2#711002-sha1:fdc329d)

bozaro@yandex.ru (JIRA)

unread,
Nov 1, 2018, 4:55:02 AM11/1/18
to jenkinsc...@googlegroups.com
Artem V. Navrotskiy updated an issue
Change By: Artem V. Navrotskiy
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:
# Dockerfile declaring ENTRYPOINT:

{code
:java }

FROM alpine:latest
COPY entry.sh /opt/bin/
ENTRYPOINT ["/opt/bin/entry.sh"]
CMD ["/bin/sh"] {code}
# ENTRYPOINT script with 3 seconds delay and creating marker file:

{code
:java }

#!/bin/sh -ex
# Starting very important services...
sleep 3
# Service is ready now
echo > /tmp/ready
exec "$@"{code}
# Jenkinsfile running container with marker file check:

{code:java}

pipeline {
    agent {
        dockerfile {
            filename 'Dockerfile'
        }
    }
    stages {
        stage('Check file') {
            steps {
                sh "cat /tmp/ready"
            }
        }
    }
}
{code}

Expected result for Jenkins test:
# At least a 3-second delay on pipeline withDockerContainer step
#
ENTRYPOINT script output in build output;
#
Green build


Actual result for Jenkins test:
# 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).
# Failed "Check file" step because ENTRYPOINT is not completed yet and /tmp/ready file is not exists ;
# 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.

andrew@nicols.co.uk (JIRA)

unread,
Feb 27, 2019, 9:52:05 PM2/27/19
to jenkinsc...@googlegroups.com

andrew@nicols.co.uk (JIRA)

unread,
Feb 27, 2019, 10:00:02 PM2/27/19
to jenkinsc...@googlegroups.com
Andrew Nicols commented on Bug JENKINS-54389
 
Re: Containers with ENTRYPOINT is not started correctly

This could also be solved if Jenkins were to respect a healthcheck and the plugin changed to check the health of the container.

This could also be specified on the CLI:

docker run -u 501:501 -t --health-cmd '[ -f /tmp/ready ]' --health-start-period 1s --health-interval 100s myimage sh -c 'touch /tmp/ready && cat'

Either way we do need a way to allow slower entrypoints to do their job.

hepatitis@gmail.com (JIRA)

unread,
May 18, 2019, 1:04:03 AM5/18/19
to jenkinsc...@googlegroups.com

Similarly, I'm hitting this with builds of Hugo.  The container has a single binary in it: hugo.

 

I'm watching both the race condition called out above occurring as well as the incorrect behavior of attempting to override the valid ENTRYPOINT defined in the file.

Reply all
Reply to author
Forward
0 new messages