docker entrypoint running bash script gets “permission denied”

前端 未结 6 1674
北海茫月
北海茫月 2020-12-07 10:48

I\'m trying to dockerize my node.js app. When the container is built I want it to run a git clone and then start the node server. Therefore I put these operatio

相关标签:
6条回答
  • 2020-12-07 11:25

    I faced same issue & it resolved by

    ENTRYPOINT ["sh", "/docker-entrypoint.sh"]
    

    For the Dockerfile in the original question it should be like:

    ENTRYPOINT ["sh", "/usr/src/app/docker-entrypoint.sh"]
    
    0 讨论(0)
  • 2020-12-07 11:32

    This is an old question asked two years prior to my answer, I am going to post what worked for me anyways.

    In my working directory I have two files: Dockerfile & provision.sh

    Dockerfile:

    FROM centos:6.8
    
    # put the script in the /root directory of the container
    COPY provision.sh /root
    
    # execute the script inside the container
    RUN /root/provision.sh
    
    EXPOSE 80
    
    # Default command
    CMD ["/bin/bash"]
    

    provision.sh:

    #!/usr/bin/env bash
    
    yum upgrade
    

    I was able to make the file in the docker container executable by setting the file outside the container as executable chmod 700 provision.sh then running docker build . .

    0 讨论(0)
  • 2020-12-07 11:32

    This is a bit stupid maybe but the error message I got was Permission denied and it sent me spiralling down in a very wrong direction to attempt to solve it. (Here for example)

    I haven't even added any bash script myself, I think one is added by nodejs image which I use.

    FROM node:14.9.0
    

    I was wrongly running to expose/connect the port on my local:

    docker run -p 80:80 [name] . # this is wrong!
    

    which gives

    /usr/local/bin/docker-entrypoint.sh: 8: exec: .: Permission denied
    

    But you shouldn't even have a dot in the end, it was added to documentation of another projects docker image by misstake. You should simply run:

    docker run -p 80:80 [name]
    

    I like Docker a lot but it's sad it has so many gotchas like this and not always very clear error messages...

    0 讨论(0)
  • 2020-12-07 11:39

    An executable file needs to have permissions for execute set before you can execute it.

    In your machine where you are building the docker image (not inside the docker image itself) try running:

    ls -la path/to/directory
    

    The first column of the output for your executable (in this case docker-entrypoint.sh) should have the executable bits set something like:

    -rwxrwxr-x
    

    If not then try:

    chmod +x docker-entrypoint.sh
    

    and then build your docker image again.

    Docker uses it's own file system but it copies everything over (including permissions bits) from the source directories.

    0 讨论(0)
  • 2020-12-07 11:49
    1. "Permission denied" prevents your script from being invoked at all. Thus, the only syntax that could be possibly pertinent is that of the first line (the "shebang"), which should look like #!/usr/bin/env bash, or #!/bin/bash, or similar depending on your target's filesystem layout.

    2. Most likely the filesystem permissions not being set to allow execute. It's also possible that the shebang references something that isn't executable, but this is far less likely.

    3. Mooted by the ease of repairing the prior issues.


    The simple reading of

    docker: Error response from daemon: oci runtime error: exec: "/usr/src/app/docker-entrypoint.sh": permission denied.
    

    ...is that the script isn't marked executable.

    RUN ["chmod", "+x", "/usr/src/app/docker-entrypoint.sh"]
    

    will address this within the container. Alternately, you can ensure that the local copy referenced by the Dockerfile is executable, and then use COPY (which is explicitly documented to retain metadata).

    0 讨论(0)
  • 2020-12-07 11:51

    If you do not use DockerFile, you can simply add permission as command line argument of the bash:

    docker run -t <image>  /bin/bash -c "chmod +x /usr/src/app/docker-entrypoint.sh; /usr/src/app/docker-entrypoint.sh"
    
    0 讨论(0)
提交回复
热议问题