千家信息网

Docker的数据管理方式

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,一.Docker数据管理方式简介Docker提供三种不同的方式将数据从宿主机挂载到容器中:volumes,bind mounts和tmpfs。1.Volumes:Docker管理宿主机文件系统的一部分
千家信息网最后更新 2026年11月04日Docker的数据管理方式

一.Docker数据管理方式简介

Docker提供三种不同的方式将数据从宿主机挂载到容器中:volumes,bind mounts和tmpfs。

1.Volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。

2.bind mounts:可以挂载在宿主机系统的任意位置。

3.tmpfs: 挂载存储在宿主机系统的内存中,而不会写入宿主机的文系统。

二管理volume卷

1.管理volume卷

#显示卷

[root@docker sky9890]# docker volume ls

DRIVER VOLUME NAME

local 0b37cdeff2004e6f6293ba0175df953e93a0244c945dd030a27c9c2d70015473

……

#创建卷

[root@docker sky9890]# docker volume create nginx-vol

nginx-vol

[root@docker sky9890]# docker volume ls

local nginx-vol

[root@docker sky9890]# docker volume inspect nginx-vol

[

{

"Driver": "local",

"Labels": {},

"Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data",

"Name": "nginx-vol",

"Options": {},

"Scope": "local"

}

]

2.用卷创建一个容器:

[root@docker sky9890]#

docker run -d --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx

unknown flag: --mount

[root@docker sky9890]# docker run -d -it --name=nginx-001 -v nginx-vol:/usr/share/nginx/html nginx

2c3e14431a622a4c9af303596853cc5b59696c42c4da5e264dfc190e7f5f4c71

#执行nginx-001容器

[root@docker sky9890]# docker exec -it nginx-001 bash

root@2c3e14431a62:/#

root@2c3e14431a62:/# cd /usr/share/nginx/html/

root@2c3e14431a62:/usr/share/nginx/html# ls

50x.html index.html

#在容器中创建一个test.html文件

root@2c3e14431a62:/usr/share/nginx/html# touch test.html

root@2c3e14431a62:/usr/share/nginx/html# ls

50x.html index.html test.html

root@2c3e14431a62:/usr/share/nginx/html# vim test.html

欢迎学习Docker!

#在volumes数据卷中同步了容器中创建的文件

[root@docker sky9890]# cd /var/lib/docker/volumes/nginx-vol/_data/

[root@docker _data]# ls

50x.html index.html

[root@docker _data]# ls

50x.html index.html test.html

#删除所有容器

#Docker rm -f $(docker ps -q -a)

#Docker ps -a

#创建nginx-003容器

[root@docker _data]# docker run -d -it --name=nginx-003 -p 8081:80 -v nginx-vol:/usr/share/nginx/html nginx

7aacbe13f3817e54965e0c7d48969d465665a28e4413b418066385805a08b60f

#停止nginx-test容器

[root@docker _data]# docker container stop nginx-test

nginx-test

#删除nginx-test容器

[root@docker _data]# docker container rm nginx-test

nginx-test

#无法删除nginx-vol卷,原因是还在使用

[root@docker _data]# docker volume rm nginx-vol

Error response from daemon: Unable to remove volume, volume still in use: remove nginx-vol: volume is in use - [2c3e14431a622a4c9af303596853cc5b59696c42c4da5e264dfc190e7f5f4c71, e64dab498554ee101b0157cbbf4fbe5d5295ec2519327c6afbe042e60222d618, 7aacbe13f3817e54965e0c7d48969d465665a28e4413b418066385805a08b60f]

docker stop nginx-vol

docker volume rm nginx-vol

docker stop nginx-001

docker stop nginx-002

docker stop nginx-003

[root@docker _data]# docker ps

#将所有容器停止了也法删除nginx-vol卷

小结:

1.如果没有指定卷,则会自动创建。

2.教练建议使用-mount,更通用。但是使用mount就报错。

三.Bind Mounts

#先删除所有容器

[root@docker sky9890]# docker rm -f $(docker ps -q -a)

7aacbe13f381

e64dab498554

2c3e14431a62

01791c36ed28

......

fe6672a1ba22

#创建卷

#方式一:必须先创建原有目录,否则报错

[root@docker sky9890]# mkdir -p /app/wwwrott

[root@docker sky9890]#

docker run -d -it --name=nginx-test

--mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx

unknown flag: --mount

#mount报错

方式二:

[root@docker sky9890]# docker run -d -it --name=nginx-test

-v /app/wwwroot:/usr/share/nginx/html nginx

ee97dec7d52b310eb3d93f42e05f272e3f97e23b5c49625966310d86b834ab0d

#执行容器

[root@docker sky9890]# docker exec -it nginx-test bash

root@ee97dec7d52b:/#

root@ee97dec7d52b:/usr/share/nginx/html# ls

root@ee97dec7d52b:/usr/share/nginx/html# ls

index.html

root@ee97dec7d52b:/usr/share/nginx/html# cat index.html

欢迎学习Docker!

#在宿主机上创建index.html,会同步到容器指定目录中

[root@docker wwwroot]# pwd

/app/wwwroot

[root@docker wwwroot]# ls

[root@docker wwwroot]# touch index.html

[root@docker wwwroot]# ls

index.html

[root@docker wwwroot]# vim index.html

欢迎学习Docker!

#验证绑定

[root@docker wwwroot]# docker inspect nginx-test

#docker container stop nginx-test

#docker container rm nginx-test

小结:

1.如果源文件/目录没有存在,不会自动创建,会抛出一个错误 。

2.如果挂载目录在容器中非空目录,则该目录现有内容将被隐藏。

四.创建数据卷容器过程中的问题

在使用volume与Bind Mounts创建容器中使用的mount参数会报如下错误:

Docker Unknown flag --mount

原因如下:

docker run support for the --mount option was only introduced in Docker 17.06. You are using Docker 1.13.1. You have two choices:

1. Update to Docker 17.06 or later if you can;

2. Use the -v approach to bind mount the volume you require e.g. docker run -v $(pwd):/home

解决步骤:升级docker版本

1.查找主机上相关软件包

[root@docker /]# rpm -qa|grep docker

docker-1.13.1-108.git4ef4b30.el7.centos.x86_64

docker-client-1.13.1-108.git4ef4b30.el7.centos.x86_64

docker-common-1.13.1-108.git4ef4b30.el7.centos.x86_64

2.卸载软件相关包

[root@docker /]# yum remove docker-1.13.1-108.git4ef4b30.el7.centos.x86_64

警告:/etc/sysconfig/docker-storage 已另存为 /etc/sysconfig/docker-storage.rpmsave

警告:/etc/docker/daemon.json 已另存为 /etc/docker/daemon.json.rpmsave

[root@docker /]#yum remove docker-client-1.13.1-108.git4ef4b30.el7.centos.x86_64

[root@docker /]# ym remove docker-common-1.13.1-108.git4ef4b30.el7.centos.x86_64

[root@docker sky9890]# docker

bash: docker: 未找到命令

3.升级到最新版本

[root@docker sky9890]# curl -fssl https://get.docker.com/ |sh

If you would like to use Docker as a non-root user, you should now consider

adding your user to the "docker" group with something like:

sudo usermod -aG docker your-user

Remember that you will have to log out and back in for this to take effect!

WARNING: Adding a user to the "docker" group will grant the ability to run

containers which can be used to obtain root privileges on the

docker host.

Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface

for more information.

4.重启Docker

#systemctl rstart docker

5.设置开机启动

#systemctl enable docker

6.查看docker版本信息

[root@docker sky9890]# docker version

Client: Docker Engine - Community

Version: 19.03.7

API version: 1.40

Go version: go1.12.17

Git commit: 7141c199a2

Built: Wed Mar 4 01:24:10 2020

OS/Arch: linux/amd64

Experimental: false

......

7.查看容器信息

[root@docker sky9890]# docker info

Client:

......

Kernel Version: 3.10.0-862.11.6.el7.x86_64

Operating System: CentOS Linux 7 (Core)

OSType: linux

Architecture: x86_64

CPUs: 1

Total Memory: 983.3MiB

Name: docker

ID: E33X:T43J:BY3N:CFKG:6L7Q:XSGB:JZPA:GFNI:QHT5:LSAU:YDZW:BPAI

Docker Root Dir: /var/lib/docker

Debug Mode: false

Registry: https://index.docker.io/v1/

Labels:

Experimental: false

Insecure Registries:

127.0.0.0/8

Live Restore Enabled: false

WARNING: IPv4 forwarding is disabled

WARNING: bridge-nf-call-iptables is disabled

WARNING: bridge-nf-call-ip6tables is disabled

8.查看镜像

[root@docker sky9890]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

sky9899 self 1302c27299d6 20 hours ago 1.22MB

busybox v2 6e9545b1e2a2 20 hours ago 1.22MB

tomcat latest 4e7840b49fad 6 days ago 529MB

nginx latest a1523e859360 7 days ago 127MB

python 3.5 0320ef7199ca 7 days ago 909MB

mysql latest c8ad2be69a22 7 days ago 465MB

php latest e66ae809d99a 7 days ago 405MB

httpd latest c5a012f9cf45 7 days ago 165MB

mongo latest bcef5fd2979d 12 days ago 386MB

ubuntu latest 72300a873c2c 12 days ago 64.2MB

centos latest 470671670cac 6 weeks ago 237MB

busybox latest 6d5fcfe5ff17 2 months ago 1.22MB

nginx 1.11 5766334bdaa0 2 years ago 183MB

nginx 1.11 5766334bdaa0 2 years ago 183MB

nginx v1 5766334bdaa0 2 years ago 183MB

WARNING: IPv4 forwarding is disabled

WARNING: bridge-nf-call-iptables is disabled

WARNING: bridge-nf-call-ip6tables is disabled

9.解决上述三年报警问题

[root@docker sky9890]# vim /etc/sysctl.conf

net.ipv4.ip_forward=1

net.bridge.bridge-nf-call-ip6tables=1

net.bridge.bridge-nf-call-iptables=1

[root@docker sky9890]# sysctl -p

10.测试mount

[root@docker sky9890]# docker run -d -it --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx

Unable to find image 'nginx:latest' locally

latest: Pulling from library/nginx

68ced04f60ab: Already exists

28252775b295: Pull complete

a616aa3b0bf2: Pull complete

Digest: sha256:2539d4344dd18e1df02be842ffc435f8e1f699cfc55516e2cf2cb16b7a9aea0b

Status: Downloaded newer image for nginx:latest

docker: Error response from daemon: Conflict. The container name "/nginx-test" is already in use by container "ee97dec7d52b310eb3d93f42e05f272e3f97e23b5c49625966310d86b834ab0d". You have to remove (or rename) that container to be able to reuse that name.

See 'docker run --help'.

[root@docker sky9890]# docker run -d -it --name=nginx --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx

15ef64d51e113d571b0cb6fb89d3b891bcba826f4cc2ae2e3ad584294274aa9d

[root@docker sky9890]# docker start nginx

nginx

[root@docker sky9890]# docker exec -it nginx bash

root@15ef64d51e11:/#

root@15ef64d51e11:/# ls /usr/share/nginx/html/test.html

/usr/share/nginx/html/test.html

root@15ef64d51e11:/# cat /usr/share/nginx/html/test.html

Sovle Docker Unknown flag --mount

#在宿舍机上创建一个文件,会同步到容器指定目录下

[root@docker wwwroot]# vim test.html

Sovle Docker Unknown flag --mount

#重新创建一个容器,并指一个端口

[root@docker sky9890]# docker run -d -it --name=nginx01 -p 8080:80 --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx

6cc7f85a4cd1cc0fb23f2a60a1ae74bec2812d7a607ce7800f9f2db97ba8a052

#测试成功


容器 宿主 目录 宿主机 数据 方式 管理 文件 系统 版本 学习 信息 原因 小结 软件 错误 问题 中创 升级 测试 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州紫鲸互联网科技有限公司 互联网科技巨头监管 互联网科技行业发展 深圳科技互联网 互联网金融公司科技 苏州互联网科技贷款公司 融势互联网科技 深圳天众互联网科技公司 兼蜜互联网科技 温州喔噻互联网科技有限公司 宁夏科技产业互联网案例 花神(南京)互联网科技有限公司 互联网科技公司有风险吗 互联网科技产业特征 互联网科技创新的路径 互联网企业科技类企业如何做账 卡尔迅互联网科技有限公司 美国五大互联网科技公司市值多少 玉溪新华互联网科技怎么选 杭州科技互联网公司有哪些 互联网络科技有限公司 奇酷互联网络科技 苏州互联网科技贷款公司 互联网科技美容 互联网实体化科技化 成都互联网科技公司100强 顶级互联网科技成果有哪些 江苏互联网智能科技软件 半导体行业属于互联网高科技类吗 陕西彩京云互联网科技有限公司
0