Bash: sudo: 命令未找到。

6

我有一个正在运行的容器,希望执行数据库备份。然而,从docker中输入类似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

提示:在Docker中使用sudo命令需要先安装sudo。
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,然后再试一次即可。 - Geno Chen
2个回答

1
首先,在docker exec中执行的任何操作都不会在该特定运行容器(镜像的副本)之外保留,因此,如果您希望从该镜像运行的未来容器包括sudo,则这些apt-get命令需要放入构建镜像的Dockerfile中。由于您正在使用docker-compose,因此需要先制作一个Dockerfile并指定其在YAML中的位置。
其次,您所说的“退出回到docker”是什么意思?在容器内执行的任何操作都不会对运行Docker的系统产生任何影响,但看起来您正在容器内运行软件安装命令,然后期望新安装的软件在运行Docker的Windows系统上的容器外可用。

“通过‘退出回到Docker’,我指的是我在容器内(bash)然后返回到Docker(命令:exit)。希望这有所帮助。你的第一部分说得很有道理。” - adhg
1
当您退出容器时,您不再处于Docker中,而只是在本地机器的命令提示符下。 - Mark Reed

-1

要在容器中备份Postgres数据库,首先必须进入容器(类似于您如何执行此操作):

docker exec -it postgres bash

(将postgres替换为您从docker-compose ps获得的真实容器名称) 现在您以root身份进入了容器。这意味着您不需要sudo来执行任何操作。接下来创建您的备份文件夹:

mkdir /tmp/backup

现在运行备份命令,从快速谷歌搜索中我找到了以下内容(您可能知道得更好):

pg_dumpall > /tmp/backup/filename

然后在容器内输入exit命令退出shell。从您的主机系统运行以下命令将备份文件从容器中复制出来:

docker cp postgres:/tmp/backup/filename .

(postgres 是你的容器名称)


是的。我已经尝试过了,当执行“docker cp…”时,我得到了“拒绝访问”的错误,并且使用sudo命令会出现“Bash sudo命令未找到”的错误。 - adhg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接