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:找不到命令的主要内容,如果未能解决你的问题,请参考以下文章

sudo:端口:找不到命令

使用 sudo 时找不到命令

使用 sudo 时找不到命令

sudo xx 找不到命令

解决sudo用户找不到环境变量的问题

在 sudo 上找不到命令