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

标签 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命令失败。

最佳答案

实际上将其发布为答案:

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

因此,docker cp命令也将以您自己的用户身份执行,但是您将登录到root帐户。

这导致您看不到docker cp的输出(这可能使您了解不起作用的情况-我认为特权不足)。

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

关于shell - 与其他Linux命令一起运行shell脚本中包含的Docker命令并切换用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46932275/

相关文章:

bash - 用于检查三个变量是否相同的 unix shell 脚本

docker - 无法连接到位于 127.0.0.1 的 Redis :6379: Connection refused in docker

php - iconv 不适用于 Docker FPM Alpine

docker - `docker0` 是什么?

docker - Docker-Compose 上的 InfluxDB 无法读取 SSL 证书文件

linux - 通过sh运行ddl文件

perl - 如何使用 shell(awk、sed 等)删除文件中的前两列

shell - 我应该在 POSIX shell 中使用 "test"还是 "[" "]"?

linux - 从 bash 脚本创建的全局 bash 脚本别名

docker - 代理重启后汇合的 Kafka 消费者卡住