[这里是docekr新手]我有一个正在运行的容器,我希望执行数据库备份。显然,来自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
答案 0 :(得分:0)
首先,您在docker exec
中所做的任何操作都不会在该特定运行容器(图像的副本)之外持久存在,因此,如果您希望以后从该图像运行的容器包括sudo
,则这些{ {1}}命令需要进入构建映像的Dockerfile中。由于您使用的是apt-get
,因此您需要先创建一个Dockerfile并在YAML中指定其位置。
第二,您什么意思是“退出docker”?在容器内进行的任何操作都不会对Docker本身所运行的系统产生任何影响,但是看起来您正在Docker容器内运行软件安装命令,然后期望这会导致新安装的软件被在运行Docker的Windows系统上的容器外部可用。
答案 1 :(得分:0)
要在容器中备份postgres数据库,首先必须输入容器(类似于您的操作):
docker exec -it postgres bash
(用您从docker-compose ps
获得的真实容器名称进行subgres postgres)
现在,您以根用户身份进入容器。这意味着,您不需要sudo进行任何操作。接下来创建您的备份文件夹:
mkdir /tmp/backup
现在,从一个快速的Google运行备份命令,我发现了以下内容(您可能知道的更多):
pg_dumpall > /tmp/backup/filename
然后通过键入exit退出容器内的外壳。从主机系统运行以下命令,将备份文件复制到容器外:
docker cp postgres:/tmp/backup/filename .
(postgres再次是您的容器名称)