使用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
命令失败。
答案 0 :(得分:1)
实际上将此作为答案发布:
您在脚本期间将当前用户切换为root,但脚本由您自己的用户执行。
因此docker cp
命令也将作为您自己的用户执行,但您将登录到root帐户。
这导致您没有看到docker cp
的输出(这可能会让您深入了解不工作 - 我认为权限不足)。
解决方法是在sudo
之前使用docker cp
,以root身份启动脚本或将用户添加到“docker”组,授权用户使用docker
命令
答案 1 :(得分:1)
经过深入研究,因为我想以普通用户身份运行我的脚本,并且只在必要时以Root身份运行某些命令,我想出了一个有效的解决方案。
我的脚本现在看起来像这样(运行时带有
$ 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"
。系统提示输入密码并以root身份在引号中执行命令,然后shell以普通用户身份继续。
答案 2 :(得分:0)
我遇到了类似的问题,即docker命令在终端上运行良好,但是当我将它们编译为bash脚本时却没有运行相同的命令,该问题基本上是由于两个原因。