Bash:sudo:找不到命令
Posted
技术标签:
【中文标题】Bash:sudo:找不到命令【英文标题】:Bash: sudo: command not found 【发布时间】:2019-01-15 00:02:42 【问题描述】:我有一个正在运行的容器,我希望执行数据库备份。显然,来自 docker 的简单命令,例如:sudo mkdir new_folder
会导致:bash: sudo: command not found
我尝试了什么(直观地)我使用docker exec -i -t 434a38fedd69/bin/bash
和 RUN 访问了一个正在运行的容器
apt-get update
apt-get install sudo
当退出到 docker 并尝试执行 sudo mkdir new_folder
但我收到相同的消息 bash: sudo: command not found
Baresp@adhg MINGW64 /c/Program Files/Docker Toolbox/postgre
$ mkdir new_folder
mkdir: cannot create directory ‘new_folder’: Permission denied
Baresp@adhg MINGW64 /c/Program Files/Docker Toolbox/postgre
$ sudo mkdir new_folder
bash: sudo: command not found
顺便说一句,我不确定这是否相关,但我使用的 docker-compose 文件是:
version: '2'
services:
postgres:
image: postgres
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: changeme
PGDATA: /data/postgres
volumes:
- /data/postgres:/data/postgres
ports:
- "5432:5432"
networks:
- postgres
restart: unless-stopped
container_name: xx_postgres
pgadmin:
links:
- postgres:postgres
image: fenglc/pgadmin4
volumes:
- /data/pgadmin:/root/.pgadmin
ports:
- "5050:5050"
networks:
- postgres
restart: unless-stopped
container_name: xx_pgadmin
networks:
postgres:
driver: bridge
【问题讨论】:
虽然这个问题是2.5年前的问题,但我想问一个问题:为什么你的提示有字符串MINGW64
?并且/c/program files/
目录表明你使用的是Windows + MinGW:你根本不会有任何权限问题,只需从你的命令中删除sudo
然后再试一次。
【参考方案1】:
首先,您在 docker exec
中所做的任何操作都不会在该特定运行容器(映像的副本)之外持续存在,因此如果您希望将来从该映像运行的容器包含 sudo
,则那些 apt-get
命令需要进入构建镜像的 Dockerfile。其中,由于您使用的是docker-compose
,因此需要您首先创建一个 Dockerfile 并在 YAML 中指定其位置。
第二,“退出回到docker”是什么意思?您在容器中所做的任何事情都不会对 Docker 本身正在运行的系统产生任何影响,但看起来您正在 Docker 容器中运行软件安装命令,然后期望这会导致新安装的软件被在运行 Docker 的 Windows 系统上的容器之外可用。
【讨论】:
“退出到 docker”我的意思是我在容器内(bash),然后我回到了 docker(命令:exit)。希望这有帮助。第一部分的要点。有道理。【参考方案2】:要对容器中的postgres数据库做备份,首先要进入容器(和你的做法类似):
docker exec -it postgres bash
(用您从docker-compose ps
获得的真实容器名称替换 postgres)
现在您在容器中作为根。这意味着,您不需要 sudo 做任何事情。接下来创建备份文件夹:
mkdir /tmp/backup
现在运行备份命令,通过快速谷歌我发现了以下内容(您可能知道得更好):
pg_dumpall > /tmp/backup/filename
然后键入exit 退出容器内的shell。从您的主机系统运行以下命令将备份文件复制出容器:
docker cp postgres:/tmp/backup/filename .
(postgres 又是你的容器名称)
【讨论】:
是的。我已经尝试过了,当执行“docker cp ...”时,我得到“访问被拒绝”并且 sudo 导致“找不到 Bash sudo 命令”。以上是关于Bash:sudo:找不到命令的主要内容,如果未能解决你的问题,请参考以下文章