Linux端末を使用して、実行したいコマンドのシーケンスを含むbashスクリプト(.shファイル)を実行します。シェルスクリプトにDockerコマンドを他のLinuxコマンドと一緒に実行すると、ユーザを切り替える
私のシェルスクリプト内からDockerコマンドを実行できないという問題があります。私はこのDockerコマンドを、root権限でターミナルに直接入力したときに実行できますが、シェルスクリプトファイルに含めるときは実行できません。コマンドラインから一般ユーザとして実行
私のスクリプトは、次のようになります。
#!/usr/bin/env bash
cd /home/user/docker_backup
# remove /home/user/docker_backup/data
rm -rf data
# Switch to root privileges. my system is set to only run Docker as root
su
# Copy a folder from Docker container to host OS
docker cp <container-name>:/home/user/data /home/user/docker_backup
# More general user commands
cd ..
私のコードは上記のみsu
行まで実行されます。 rootパスワードを入力しても、何も起こりません。私がexit
と入力すると、許可エラーが表示されます。つまり、docker cp
コマンドが失敗しました。あなたがスクリプト中にルートに現在のユーザーを切り替える
が、スクリプトは、独自のユーザーによって実行されました:
「su」でroot特権に切り替えることはできません。上に 'su'を追加するのではなく、' sudo'でコマンドを実行してみてください。 – samprog
@samprog私はrootアカウントを持っていますので、 '' 'su''を使用するとrootパスワードを入力して入力し、rootとして私のコマンドラインを表示します。 – ColinWa
これは予想される動作です。スクリプト中に現在のユーザーをrootに切り替えるが、スクリプトは自分のユーザーによって実行された。したがって、 'docker cp'コマンドはあなた自身のユーザーとしても実行されますが、あなたはrootアカウントにログインします。この結果、 'docker cp'の出力が見えなくなります(これは、あなたには洞察力が働かないかもしれません - 十分な権限がないと思います)。 – samprog