簡體   English   中英

Bash:sudo:找不到命令

[英]Bash: sudo: command not found

我有一個正在運行的容器,我希望執行數據庫備份。 顯然,來自sudo mkdir new_folder的簡單命令,例如: sudo mkdir new_folder導致: bash: sudo: command not found

我嘗試了什么(在直觀層面上)我使用docker exec -i -t 434a38fedd69/bin/bash和 RUN 訪問了一個正在運行的容器

apt-get update 
apt-get install sudo

當退出回到sudo mkdir new_folder並嘗試執行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 docker-compose ,因此需要您首先制作一個 Dockerfile 並在 YAML 中指定其位置。

其次,“退出回到docker”是什么意思? 您在容器內所做的任何事情都不會對運行 Docker 本身的系統產生任何影響,但看起來您正在 Docker 容器內運行軟件安裝命令,然后期望這會導致新安裝的軟件在運行 Docker 的 Windows 系統上的容器外部可用。

要做容器中postgres數據庫的備份,首先要進入容器(和你做的方式類似):

docker exec -it postgres bash

(substitude postgres 與您從docker-compose ps獲得的真實容器名稱)現在您以 root 身份在容器 這意味着,你不需要 sudo 任何東西。 接下來創建您的備份文件夾:

mkdir /tmp/backup

現在運行備份命令,從快速谷歌我發現以下(你可能更清楚):

pg_dumpall > /tmp/backup/filename

然后通過鍵入 exit 退出容器內的 shell。 從您的主機系統運行以下命令以將備份文件復制出容器:

docker cp postgres:/tmp/backup/filename .

(postgres 又是你的容器名)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM