与其他Linux命令和切换用户一起运行shell脚本中包含的Docker命令

时间:2017-10-25 12:19:35

标签: shell docker

使用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命令失败。

3 个答案:

答案 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脚本时却没有运行相同的命令,该问题基本上是由于两个原因。

  1. 需要以sudo命令的特权提升docker命令的运行权限(例如: sudo docker ps 有效,但docker ps无法工作)。可以将当前用户添加到docker组中,这样我们就不需要在每个docker命令中使用sudo。请访问this链接,并按照第2部分的步骤进行操作。
  2. 以正确的方式运行脚本
    1. 一个应该具有#!脚本开头的bin / bash 。每个脚本都需要 shebang
    2. 一个人应该保存文件不带.sh扩展名
    3. 应该通过给出命令 chmod 777 script_name
    4. 来提供脚本的执行许可。
    5. 使用 bash script_name
    6. 运行脚本