在Linux终端上,我运行包含我要执行的命令序列的bash脚本(.sh文件)。
问题是我无法在Shell脚本中运行Docker命令。当它以root特权直接在终端上键入时,我可以运行此Docker命令,但是当我将它包含在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
行。输入root密码后,什么都没有发生。如果我输入exit
,则会出现权限错误,这意味着docker cp
命令失败。
最佳答案
实际上将其发布为答案:
您在脚本期间将当前用户切换为root用户,但是脚本是由您自己的用户执行的。
因此,docker cp
命令也将以您自己的用户身份执行,但是您将登录到root帐户。
这导致您看不到docker cp
的输出(这可能使您了解不起作用的情况-我认为特权不足)。
一种解决方案是在sudo
之前使用docker cp
,以root身份启动脚本,或者将您的用户添加到“docker”组,该组授权您的用户使用docker
命令
关于shell - 与其他Linux命令一起运行shell脚本中包含的Docker命令并切换用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46932275/