在docker容器上添加新的映射卷

本文介绍了解决Docker容器运行中需要添加新卷的问题,提供了两种解决方案:一是将容器保存为镜像再添加卷;二是通过修改容器配置文件直接添加新卷,包括停止容器、修改配置文件和重启服务等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

起因

  • 在很多情况下,在启动docker时会用-v参数添加映射卷,但是很多情况是,在容器里面安装了很多模块之后,才发现漏添加某些卷,这时就需要添加新卷的办法

解决方案

方案1

  • 把容器保存为镜像,然后用-v参数添加新的卷。这个方式比较麻烦,建议不用

方案2

停止容器,直接修改容器配置文件

  • 停止容器
# docker stop 容器名称
  • 停止docker服务
    如果不停止服务的话,修改配置文件会被docker重新覆盖,无法使文件生效,如果手足够快也可以,但是几乎是不可能的
# systemctl stop docker
  • 修改配置文件
    配置文件在/var/lib/docker/containers目录,要注意检查自己想修改容器的ID,与子目录的名称是匹配的,要修改两个配置文件,如下
# vi /var/lib/docker/containers/容器ID/config.v2.json
	"MountPoints": {
		"主机路径": {
			"Source": "主机路径",
			"Destination": "容器路径",
			"RW": true,
			"Name": "",
			"Driver": "",
			"Type": "bind",
			"Propagation": "rprivate",
			"Spec": {
				"Type": "bind",
				"Source": "主机路径",
				"Target": "容器路径"
			}
		}
	}
# vi /var/lib/docker/containers/容器ID/hostconfig.json
	"Binds": [
		"主机路径:容器路径"
	],

要注意标题符号呀,切记切记

  • 重启docker服务
# systemctl start docker
  • 启动容器
# docker start 容器id
<think>好的,我需要回答如何在Docker容器中设置端口映射。首先,用户提到了两种方式:配置文件和命令行。Docker通常使用Dockerfile或者docker run命令,还有Docker Compose来管理配置。 首先,命令行方面,我记得docker run有一个-p参数,用来指定端口映射。比如-p 8000:5000就是把容器的5000端口映射到主机的8000。用户可能需要例子,所以应该写上具体的命令,比如`docker run -p 8080:80 nginx`。 然后是Dockerfile,不过实际上Dockerfile里是用EXPOSE指令来声明容器监听的端口,但这并不会自动映射到主机。所以需要说明EXPOSE和实际映射的区别,可能需要结合docker run的-p参数一起用。 接下来是Docker Compose,用户提供的引用里有提到Compose文件中的端口配置。比如在服务的配置里使用ports字段,格式是"主机端口:容器端口"。例如: services: web: ports: - "8000:5000" 引用里的例子显示,Compose文件里指定构建上下文和Dockerfile的位置,同时设置端口映射。这里需要引用用户提供的引用[1]和[2]来支持说明。 另外,用户可能还想了解如何动态添加或删除端口映射。但根据Docker的设计,容器一旦创建,端口映射不能直接修改,必须重新创建容器。不过,用户提到的引用[4]使用iptables命令手动删除规则,这可能是一种高级操作,但需要注意潜在的风险,比如破坏Docker的网络管理。需要提醒用户谨慎使用这种方法,并推荐使用标准的Docker命令或Compose文件来管理。 最后,总结几种方法:命令行、Dockerfile(配合run命令)、Compose文件,以及注意事项。要确保回答结构清晰,分点说明,并正确引用提供的资料。</think>### 如何设置Docker容器的端口映射Docker容器的端口映射可以通过以下三种方式配置: --- #### **1. 命令行直接设置** 在运行容器时使用 `-p` 参数指定端口映射,格式为 `主机端口:容器端口`。 **示例**:将容器的80端口映射到主机的8080端口 ```bash docker run -d -p 8080:80 nginx ``` 支持多端口映射: ```bash docker run -d -p 8080:80 -p 8443:443 nginx ``` --- #### **2. Dockerfile声明(需配合命令行使用)** 在Dockerfile中使用 `EXPOSE` 指令声明容器监听的端口,但需配合 `-p` 参数生效: ```dockerfile FROM nginx EXPOSE 80 # 声明容器监听80端口 ``` 实际映射仍需通过命令行或Compose文件设置: ```bash docker run -d -p 8080:80 my-nginx-image ``` --- #### **3. Docker Compose文件配置** 在 `docker-compose.yml` 中使用 `ports` 字段定义端口映射,格式与命令行一致: ```yaml services: web: image: nginx ports: - "8080:80" # 单端口映射 - "8443:443" # 多端口映射 ``` Compose支持同时指定构建上下文和Dockerfile路径(如引用[1]所述): ```yaml build: context: . dockerfile: Dockerfile-alternate ``` 同时,Compose会自动为服务创建网络,容器间可通过服务名通信(如引用[3]所述)。 --- #### **注意事项** - **动态修改端口映射**:容器创建后无法直接修改端口,需重新构建或运行新容器。 - **手动调整iptables(不推荐)**:可通过类似 `iptables -t nat -D DOCKER 5` 删除规则(如引用[4]),但可能破坏Docker网络管理,需谨慎操作。 - **网络优先级**:自定义网络(如Compose默认网络)优于 `links` 标签(如引用[3]所述),建议优先使用网络配置。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值