2017-10-25 2 views
0

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コマンドが失敗しました。あなたがスクリプト中にルートに現在のユーザーを切り替える

が、スクリプトは、独自のユーザーによって実行されました:

+1

「su」でroot特権に切り替えることはできません。上に 'su'を追加するのではなく、' sudo'でコマンドを実行してみてください。 – samprog

+0

@samprog私はrootアカウントを持っていますので、 '' 'su''を使用するとrootパスワードを入力して入力し、rootとして私のコマンドラインを表示します。 – ColinWa

+1

これは予想される動作です。スクリプト中に現在のユーザーをrootに切り替えるが、スクリプトは自分のユーザーによって実行された。したがって、 'docker cp'コマンドはあなた自身のユーザーとしても実行されますが、あなたはrootアカウントにログインします。この結果、 'docker cp'の出力が見えなくなります(これは、あなたには洞察力が働かないかもしれません - 十分な権限がないと思います)。 – samprog

答えて

1

は、実はその答えとしてこれを掲示します。

したがって、docker cpコマンドも自分のユーザーとして実行されますが、rootアカウントにログインします。

この結果、docker cpの出力が表示されなくなります(これは、動作していないとの洞察を与えるかもしれません - 不十分な特権だと思います)。

これに対する解決策は、私のように、rootとしてスクリプトを起動するか、徹底した調査後dockerコマンド

+1

お返事ありがとうございます。 '' 'su root -c ' ''は動作しませんでした。また、私はrootとuserの間で切り替えることができ、現在のスクリプトで特権を持つコマンドを実行することができます – ColinWa

+0

他のソリューションの1つは動作しましたか? – samprog

+0

rootとしてスクリプトを起動する – ColinWa

1

を使用するようにユーザーを許可グループ「ドッキングウィンドウ」にユーザーを追加する、docker cpsudoを使用しているいずれか私のスクリプトを一般ユーザとして実行し、必要に応じて特定のコマンドをルートとして実行したいと思っていたので、私はその解決策を思いつきました。

私のスクリプトは次のようになります( $ sh script_name.shで実行):一般ユーザーとして

#!/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 - root -c "docker cp <container-name>:/home/user/data /home/user/docker_backup" 
# More general user commands 
cd .. 

実行シェルスクリプトを。 root権限を必要とするコマンドについては、su - root -c "command"を使用します。システムはパスワードの入力を求め、コマンドをrootとして引用符で囲みます。シェルは一般ユーザとして進みます。

関連する問題