web-dev-qa-db-ja.com

chmod: 'myscript.sh'のアクセス許可の変更:操作は許可されていません

次の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は、ファイルをコピーするときに権限を保持します。

3

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を変更せずにスクリプトの権限を変更できるようになりますが、コンテナー内のスクリプトを変更するよりも多くのアクセス権がユーザーに与えられる可能性があります。

3
BMitch

ls -ld scriptsを使用して、/ scriptsディレクトリの権限を確認します。ユーザーにこのディレクトリへの書き込み権限がない可能性があります。

1
macrokernel

chmodを使用する代わりにSudo chmodを使用する

0
vishnu dk