运行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以普通用户身份继续。
- Dockerfile:尝试运行shell脚本时的代码127
- 如果我们运行具有.sh文件的dockerfile,“docker build”和“docker run”之间的区别
- Shell脚本在Docker for Windows上失败
- 使用Docker镜像运行shell脚本
- Docker CMD评估与ENTRYPOINT
- Jenkins无法在Docker中运行Python文件 – 文件未find
- 从shell脚本中返回一个结果值,用于在Docker容器中的testing给Jenkins CI
- 得到curl:(52)从jenkins工作运行时从服务器的空回复(只有与我使用docker运行的工作问题)
- Jenkinsfile:在Docker容器中运行sh步骤时拒绝了权限