Bash:sudo:未找到命令

Bash:sudo:未找到命令,bash,docker,permissions,sudo,Bash,Docker,Permissions,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@ad

我有一个正在运行的容器,我希望执行数据库备份。显然,来自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 exec-I-t 434a38fedd69/bin/bash
访问了一个正在运行的容器并运行了它

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

首先,在
docker exec
中执行的任何操作都不会在特定运行容器(映像副本)之外持久化,因此,如果希望将来从该映像运行的容器包含
sudo
,则那些
apt get
命令需要进入构建映像的Dockerfile。由于您使用的是
docker compose
,因此需要首先创建Dockerfile并在YAML中指定其位置


第二,你说的“退回到码头”是什么意思?在容器内所做的任何事情都不会对Docker本身运行的系统产生任何影响,但看起来您正在Docker容器内运行软件安装命令,然后期望新安装的软件在运行Docker的Windows系统上的容器外可用。

要备份容器中的postgres数据库,首先必须输入容器(与您的操作方式类似):

(使用从docker compose ps获得的真实容器名替换postgres) 现在您以root用户身份进入容器。这意味着您不需要sudo做任何事情。接下来创建备份文件夹:

mkdir /tmp/backup
现在运行backup命令,从一个快速的Google上我发现了以下内容(您可能知道得更清楚):

然后通过键入exit退出容器中的shell。从主机系统运行以下操作以将备份文件复制出容器:

docker cp postgres:/tmp/backup/filename .

(postgres再次是您的容器名称)

是的。我尝试过,在执行“docker cp…”时,我得到“访问被拒绝”,sudo结果是“Bash sudo command not found”。我说的“退出到docker”是指我在容器(Bash)内,然后我移回docker(command:exit)。希望这有帮助。第一部分的观点是有意义的。虽然这个问题是2.5年前提出的,但我想问一个问题:为什么您的提示符中有字符串
MINGW64
?目录
/c/program files/
表明您正在使用Windows+MinGW:您根本没有任何权限问题,只需删除
sudo
从您的命令,然后重试。
docker cp postgres:/tmp/backup/filename .