运行Docker命令以及其他Linux命令和切换用户

使用Linuxterminal,我运行包含我想要执行的命令序列的bash脚本(.sh文件)。

问题是我无法在我的shell脚本中运行Docker命令。 我可以运行这个Docker命令,当它直接在terminal以root权限input时,而不是当我把它包含在shell脚本文件中。

我的脚本作为一般用户从命令行执行,如下所示:

#!/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行。 在我inputroot密码后,没有任何反应。 如果我inputexit ,我得到许可错误,这意味着docker cp命令失败。

其实发布这个答案是:

您在脚本中将当前用户切换到root用户,但脚本是由您自己的用户执行的。

所以docker cp命令也会作为你自己的用户执行,但是你将会login到root帐户。

这导致你没有看到docker cp的输出(这可能会让你看不到工作 – 我认为没有足够的特权)。

解决方法是在docker cp之前使用sudo ,以root用户身份启动脚本或将用户添加到组“docker”,授权用户使用docker命令

经过深入的研究,我想以普通用户的身份运行我的脚本,并且只在必要时以root身份运行某些命令,我​​想出了一个可行的解决scheme。

我的脚本现在看起来像这样(使用$ 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 .. 

以普通用户身份运行shell脚本。 对于需要root权限的命令,我使用su - root -c "command" 。 系统提示input密码并以root身份执行引号,然后shell以普通用户身份继续。