当前位置: 首页 > news >正文

docker被“遗忘”的那些参数该如何拯救

一、docker容器启动时没有指定端口,如何在不删除容器的情况下配置端口呢

在 Docker 中,如果容器启动时没有指定端口映射,可以通过以下步骤在不删除容器的情况下配置端口:

方法 1: 使用 docker commitdocker run

  1. 提交容器为新镜像
    使用 docker commit 将当前容器保存为新镜像。

    docker commit <container_id> new_image_name
    
  2. 重新运行容器并映射端口
    使用新镜像重新启动容器,并指定端口映射。

    docker run -d -p <host_port>:<container_port> new_image_name
    

方法 2: 修改容器配置(不推荐)

  1. 停止容器

    docker stop <container_id>
    
  2. 修改配置文件
    找到容器的配置文件(通常在 /var/lib/docker/containers/<container_id>/hostconfig.json),修改 PortBindings 部分。

  3. 重启 Docker 服务

    sudo systemctl restart docker
    
  4. 启动容器

    docker start <container_id>
    

方法 3: 使用 docker networkiptables

  1. 创建自定义网络

    docker network create my_network
    
  2. 将容器连接到自定义网络

    docker network connect my_network <container_id>
    
  3. 使用 iptables 配置端口转发

    iptables -t nat -A DOCKER -p tcp --dport <host_port> -j DNAT --to-destination <container_ip>:<container_port>
    

方法 4: 使用 socat 进行端口转发

  1. 在主机上安装 socat

    sudo apt-get install socat
    
  2. 使用 socat 转发端口

    socat TCP-LISTEN:<host_port>,fork TCP:<container_ip>:<container_port>
    

总结

推荐使用 方法 1,因为它最安全且易于操作。其他方法涉及更多手动配置,适合特定场景。

二、docker容器启动时没有指定目录挂载,如何在不删除容器的情况下配置目录挂载呢

在 Docker 中,如果容器启动时没有指定目录挂载,无法直接在不删除容器的情况下添加挂载。Docker 不支持动态修改容器的挂载配置,但可以通过以下方法间接实现类似效果:


方法 1: 使用 docker commitdocker run

  1. 提交容器为新镜像
    将当前容器保存为新镜像。

    docker commit <container_id> new_image_name
    
  2. 重新运行容器并添加挂载
    使用新镜像重新启动容器,并指定目录挂载。

    docker run -d -v /host/path:/container/path new_image_name
    

方法 2: 使用 docker cp 临时复制文件

如果只是需要将主机上的文件或目录复制到容器中,可以使用 docker cp 命令:

  1. 将文件复制到容器

    docker cp /host/path/file <container_id>:/container/path/file
    
  2. 将文件从容器复制到主机

    docker cp <container_id>:/container/path/file /host/path/file
    

方法 3: 使用 docker exec 和远程挂载

如果容器内支持网络文件系统(如 NFS),可以通过以下步骤实现挂载:

  1. 在主机上设置 NFS 共享
    配置 NFS 服务器,将主机目录共享。

  2. 在容器内挂载 NFS 共享
    使用 docker exec 进入容器,并挂载 NFS 共享。

    docker exec -it <container_id> /bin/bash
    mount -t nfs <host_ip>:/host/path /container/path
    

方法 4: 修改容器配置(不推荐)

  1. 停止容器

    docker stop <container_id>
    
  2. 修改容器配置文件
    找到容器的配置文件(通常在 /var/lib/docker/containers/<container_id>/config.v2.jsonhostconfig.json),手动添加挂载配置。

  3. 重启 Docker 服务

    sudo systemctl restart docker
    
  4. 启动容器

    docker start <container_id>
    

    注意:这种方法风险较高,可能导致容器无法启动,建议谨慎操作。


方法 5: 使用 docker volume 挂载数据卷

如果容器已经使用了 Docker 数据卷,可以通过以下步骤扩展挂载:

  1. 创建新的数据卷

    docker volume create my_volume
    
  2. 将数据卷挂载到容器
    使用 docker run 重新启动容器,并挂载新的数据卷。

    docker run -d -v my_volume:/container/path new_image_name
    

总结

  • 推荐方法:使用 方法 1docker commitdocker run),这是最安全和标准的方式。
  • 临时解决方案:使用 方法 2docker cp)复制文件。
  • 高级方案:如果需要动态挂载,可以使用 方法 3(NFS 挂载)。

Docker 的设计不支持动态修改挂载配置,因此重新创建容器是最常见的解决方案。

http://www.lryc.cn/news/533208.html

相关文章:

  • BFS算法——广度优先搜索,探索未知的旅程(下)
  • Python分享20个Excel自动化脚本
  • pytest+request+yaml+allure 接口自动化测试全解析[手动写的跟AI的对比]
  • 深入解析 FFmpeg 的 AAC 编解码过程
  • 嵌入式硬件篇---OpenMV串口通信json字符串
  • Python基于Django的课堂投票系统的设计与实现【附源码】
  • 蓝桥杯 Java 之输入输出
  • Kubernetes是什么?为什么它是云原生的基石
  • @emotion/styled / styled-components创建带有样式的 React 组件
  • Android 常用命令和工具解析之Battery Historian
  • 家用报警器的UML 设计及其在C++和VxWorks 上的实现01
  • k8s常见面试题2
  • CSS 伪类(Pseudo-classes)的详细介绍
  • 将Deepseek接入pycharm 进行AI编程
  • 【Ollama】一、介绍
  • ASP.NET Core JWT
  • 查询引擎:它们是什么以及为什么重要
  • 03/29 使用 海康SDK 对接时使用的 MysqlUtils
  • 2025.2.7 Python开发岗面试复盘
  • 一个sql只能有一个order by
  • Windows Docker笔记-在容器中运行项目
  • postgreSQL16.6源码安装
  • 寒假2.5
  • 定期删除一周前的数据,日志表的表空间会增长吗?
  • yum 安装mysql
  • Servlet笔记(下)
  • Windows 中学习Docker环境准备3、在Ubuntu中安装Docker
  • 【centOS】搭建公司内网git环境-GitLab 社区版(GitLab CE)
  • Unity DoTween使用文档
  • 【办公类-99-01】20250201学具PDF打印会缩小一圈——解决办法:换一个PDF阅读器