chmod: changing permissions of 'myscript.sh' : Operation not permitted
While running the following docker file I am getting "chmod: changing permissions of '/scripts/entrypoint.sh': Operation not permitted"
error.
FROM sonarqube:7.7-community
ADD plugins/* /plugins/
ADD scripts/* /scripts/
ADD conf/* /conf/
ADD bin/* /bin/
RUN chmod -R a+X /scripts/myScript.sh
ENTRYPOINT ["/scripts/myScript.sh"]
But when I add USER root
it is working. But I don't want to run it with root.
Any way I can run it without root ?
Set the permissions before you build the image
chmod +x scripts/myScript.sh
docker build .
docker will keep the permissions when it copies the files.
Changing permissions of files you do not own in Linux requires root access, and the COPY command is most likely copying the file as root. You can change back to the sonarqube user after fixing the permissions. Here's an example Dockerfile for that:
FROM sonarqube:7.7-community
COPY plugins/ /plugins/
COPY scripts/ /scripts/
COPY conf/ /conf/
COPY bin/ /bin/
USER root
RUN chmod 755 /scripts/myScript.sh
USER sonarqube
ENTRYPOINT ["/scripts/myScript.sh"]
Note I've also switched from ADD to COPY since you are not pulling remote URL's or extracting tar/zip files. The *
is also implied when copying a directory. For a single script, you do not need the -R
recursive option, and I'm explicit with the permissions since shell scripts also require read access by all users.
If you want the script to be owned by sonarqube instead, you could run:
COPY --chown=sonarqube:sonarqube scripts/ /scripts/
That should allow the user to change permissions on the script without a USER
change, but may give that user more access than you desire to modify the script inside the container.
Check permissions on the /scripts directory using ls -ld scripts
. It might be that your user does not have write permission on this directory.
use sudo chmod instead of just using chmod