次のdockerファイルを実行しているときに"chmod: changing permissions of '/scripts/entrypoint.sh': Operation not permitted"
エラーが発生します。
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"]
しかし、USER root
を追加すると機能します。しかし、私はそれをrootで実行したくありません。ルートなしで実行できる方法はありますか?
イメージをビルドする前に権限を設定します
chmod +x scripts/myScript.sh
docker build .
dockerは、ファイルをコピーするときに権限を保持します。
Linuxで所有していないファイルの権限を変更するには、rootアクセスが必要です。COPYコマンドは、ファイルをrootとしてコピーしている可能性があります。権限を修正した後、sonarqubeユーザーに戻すことができます。そのためのDockerfileの例を次に示します。
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"]
リモートURLをプルしたり、tar/Zipファイルを抽出したりしていないため、ADDからCOPYに切り替えたことにも注意してください。ディレクトリをコピーする場合、*
も暗黙的に含まれます。単一のスクリプトの場合、-R
再帰オプションは必要ありません。また、シェルスクリプトもすべてのユーザーによる読み取りアクセスを必要とするため、権限を明示的に示しています。
代わりにスクリプトをsonarqubeに所有させたい場合は、次のコマンドを実行できます。
COPY --chown=sonarqube:sonarqube scripts/ /scripts/
これにより、ユーザーはUSER
を変更せずにスクリプトの権限を変更できるようになりますが、コンテナー内のスクリプトを変更するよりも多くのアクセス権がユーザーに与えられる可能性があります。
ls -ld scripts
を使用して、/ scriptsディレクトリの権限を確認します。ユーザーにこのディレクトリへの書き込み権限がない可能性があります。
chmodを使用する代わりにSudo chmodを使用する