精华内容
下载资源
问答
  • 不想重新 run 容器,但是又必须改...容器目录映射是有两个(hostconfig.json、config.v2.json)文件决定的,根据docker ID找到这两个文件,这两个文件一般在目录 /var/lib/docker/containers/以docker ID 开头的一串...

    不想重新 run 容器,但是又必须改目录映射,怎么办?

    容器内的目录映射到宿主机上有两种情况,这两种情况无论是哪一种都需要重启docker服务方可生效。

    容器目录映射是有两个(hostconfig.json、config.v2.json)文件决定的,根据docker ID找到这两个文件,这两个文件一般在目录 /var/lib/docker/containers/以docker ID 开头的一串数字/  下

    第一种:改变容器已经映射目录的名字。

    假如,容器里的 /opt 已经映射到宿主机上 /data,改变映射 /data 为 /test

    1、在宿主机上创建你想改变的目录 /test

    2、停止容器把宿主机上 /data 里的数据拷贝到 /test下

    3、修改 hostconfig.json 文件只需要修改一处即可,(/data:/opt 改成 /test:opt)

    4、修改 config.v2.json 文件,需修改两处

    5、以上两个文件修改完成后,重启 docker 服务,启动容器,使用 docker inspect ID 可查看已经改变的映射目录。

    第二种:添加容器内目录映射到宿主机上。

    增加目录映射,就是在两个(hostconfig.json、config.v2.json)文件里增加两段文字,例如增加容器 /opt 映射到宿主机 /data 目录,有一点 一定 一定 一定 要记住,如果你映射的是 jar 包运行目录,要把容器里的 jar 包先拷贝的容器外的映射目录,不然你 jar 包可能启动不了。

    1、在 hostconfig.json 文件里添加内容

    2、在 config.v2.json 文件添加内容

    "/opt":{"Source":"/data","Destination":"/opt","RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/data","Target":"/opt"},"SkipMountpointCreation":false},

    3、重启 docker 服务,重启容器

    参考文章:https://www.cnblogs.com/linyouyi/p/10715408.html

    参考文章:https://blog.csdn.net/zdegrh_2/article/details/102790249

    展开全文
  • Docker bridge模式ping不通宿主机...最近笔者在服务器上通过Docker运行某个项目,采用默认的bridge网络并将端口映射到宿主机,结果发现在宿主机上无法访问该端口,通过测试发现宿主机与容器的网络竟然互相ping不通。

    Docker bridge模式ping不通宿主机(2021.03.28)

    1. 产生环境

    • CentOS 7.9.2009;
    • Docker 19.03.13;

    2. 问题描述

    最近笔者在服务器上通过Docker运行某个项目,采用默认的bridge网络并将端口映射到宿主机,结果发现在宿主机上无法访问该端口,通过测试发现宿主机与容器的网络竟然互相ping不通。

    Docker网络模式分为四种,一般我们不设置时默认为bridge桥接模式,容器使用独立的network Namespace,并连接到docker0虚拟网卡中。通过docker0网桥以及Iptables nat表配置与宿主机通信。

    下面在宿主机上进行复现,利用busybox进行测试:

    # 拉取镜像
    $ docker pull busybox
    
    # 运行容器
    $ docker run -itd --rm --name busy_bridge busybox
    

    通过docker network inspect bridge查看网络情况:

    image-20210328105522784

    网路配置成功,进入容器内部,通过ifconfig命令查看ip,可以看到已经分配ip,但是ping宿主机ip时失败(此处192.168.0.104为笔者宿主机ip),无法连接外部网络:

    image-20210328105425441

    但是在自己本地进行相同的测试却发现能够连同网络,这是什么问题导致的呢?

    3. 问题分析

    在网上找了很多资料都是重启docker,然后就能连上了,一般是因为修改了某个配置然后重启起作用,这里并没有什么作用。修改可总结为以下几种,下面一一展示:

    1. 修改daemon.json配置文件:

      容器内无法访问宿主机是因为网桥分配的网段和宿主机冲突了,需要修改daemon.json配置文件进行指定分配,使用自己熟悉的编辑器修改/etc/docker/daemon.json(没有该文件则手动创建),加入下面的配置;

      {
      	"bip": "172.16.10.1/24"
      }
      

      虽然重启docker并创建容器即可访问,但是,原本宿主机和容器分配的ip一点冲突也没有,该方法不行。

    2. 关闭防火墙:

      容器无法通过网桥访问宿主机,也就无法访问外网,可能是防火墙阻止访问,可以关闭防火墙或者开启某个端口。在服务器上测试,开启防火墙,发现容器确实无法访问百度首页也确实无法访问宿主机,在关闭防火墙并重启docker后,容器就能正常访问了。

      但是,宿主机上的防火墙原本就是关闭的,该方法也没用。

    3. 修改sysctl.conf配置文件:

      docker主机内部网络正常,与其它主机的连接失效,其它主机不能连接docker主机上映射的端口,docker内部也无法连接外部主机,利用docker info指令查看信息发现报错如下:

      WARNING: IPv4 forwarding is disabled
      WARNING: bridge-nf-call-iptables is disabled
      WARNING: bridge-nf-call-ip6tables is disabled
      

      使用自己熟悉的编辑器编辑/etc/sysctl.conf配置文件,加入以下配置;

      net.bridge.bridge-nf-call-ip6tables=1
      net.bridge.bridge-nf-call-iptables=1
      net.bridge.bridge-nf-call-arptables=1
      net.ipv4.ip_forward=1
      

      然后使用指令systemctl restart network重启网络,再次查看docker info,警告消失,网络恢复正常。但是宿主机上的容器还是无法通过网桥访问宿主机,无法访问外网。

    4. 重设网桥

      在使用指令yum install bridge-utils安装工具后,利用brctl show查看网桥,可以发现:

      image-20210328110919247

      利用docker network create [网桥名]指令新建网桥发现其生成的bridge id还是8000.0000000000,在新网桥上创建容器,再次查看并没有什么变化,说明很可能是网桥的问题。

      再次测试,此时网桥ip172.17.0.1,容器ip172.0.0.2,发现宿主机能ping通网桥,但是无法连接容器,而容器无法连接网桥,无法连接宿主机,更别谈外网了,所以这里可以肯定是网桥出了问题。

      image-20210328111144626

    4. 问题解决

    这里docker network生成新的网桥不行,说明dockernetwork存在问题,我们利用刚才下载的bridge-utils来创建网桥。

    首先暂停docker服务,利用指令:

    $ service docker stop
    

    添加网桥:

    $ brctl addbr br0
    

    添加ip字段:

    $ ip addr add 172.16.0.1/24 dev br0
    

    启用网桥:

    ip link set dev br0 up
    

    查看网络br0

    image-20210328111727302

    修改docker默认网桥,在/etc/docker/daemon.json添加以下字段:

    "bridge": "br0"
    

    重启docker

    $ service docker start
    

    此时查看网桥:

    image-20210328112144853

    在没有挂载容器前,依旧是8000.000000000000,运行测试容器:

    $ docker run -itd --name busy_test busybox
    

    查看网桥详情:

    image-20210328112244501

    此时容器挂载在网桥上了,再次查看网桥id

    image-20210328112319425

    说明已经起作用,进入容器内部测试外网:

    image-20210328112504990

    成功!

    补充:这里使用docker network新建网桥,没有用,发现新建网桥挂载容器后,其bridge id依旧不变,没有起作用,说明宿主机上的docker network可能存在问题。

    5. 问题补充

    上面的问题是创建自定义网桥,然后在自定义网桥上连接容器ab,结果宿主机无法pingab,且进入容器内部后,两个容器无法ping通自定义网络,但能彼此相通。

    查了很多资料,发现了这篇文章。博主说问题原因是系统内核的网桥模块bridge.ko加载失败导致,解决问题的方案是升级内核或升级系统。

    升级centos内核参考这篇。

    升级完成后,重装Docker,自定义网桥和容器,不再有网络问题。


    版权声明:本文为CSDN博主「vilce」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:Docker网桥模式ping不通宿主机

    展开全文
  • Docker中运行MySQL并挂载宿主机目录到镜像 拉取mysql镜像 docker pull mysql:5.7 ...使用镜像创建容器#将容器中MySQL的3306端口映射到本地的3306端口,挂载宿主机目录到容器目录,并设置登录密码为:...

    Docker中运行MySQL并挂载宿主机目录到镜像

    1. 拉取mysql镜像
      docker pull mysql:5.7
    2. 创建用于挂载的目录
          mkdir -p /opt/software/mysql/data
          mkdir -p /opt/software/mysql/conf
      
    3. 使用镜像创建容器
      #将容器中MySQL的3306端口映射到本地的3306端口,挂载宿主机目录到容器目录,并设置登录密码为:123456
      docker run --name mysql5.7 -p 3306:3306 -v /opt/software/mysql/data:/var/lib/mysql -v /opt/software/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
      
      

    • –name:容器名
    • –p:映射宿主主机端口
    • -v:挂载宿主目录到容器目录
    • -e:设置环境变量,此处指定root密码
    • -d:后台运行容器
    展开全文
  • 容器内拷贝文件到主机docker cp <containerId>:/file/path/within/container /host/path/target 例如: [root@hadoop hadoop]# docker cp 7a0b6182a059:/home/oracle /home/hadoop/...

     

    从容器内拷贝文件到主机上

    docker cp <containerId>:/file/path/within/container /host/path/target  

    例如:

    [root@hadoop hadoop]# docker cp 7a0b6182a059:/home/oracle /home/hadoop/silentConfig/

    实际上容器的目录在映射到宿主机为:

    /var/lib/docker/overlay/75d23e24dfcb9db41d7b51a356a294ffae82e5eaeed7670d9a7f9fa4862a933d/merged/home/oracle

     

    从主机上拷贝文件到容器内

    1.用-v挂载主机数据卷到容器内

    docker run -v /path/to/hostdir:/mnt $container  
    在容器内拷贝  
    cp /mnt/sourcefile /path/to/destfile  

    2.直接在主机上拷贝到容器物理存储系统

    A. 获取容器名称或者id :

    $ docker ps 

    B. 获取整个容器的id

    $ docker inspect -f   '{{.Id}}'  步骤A获取的名称或者id 

    C. 在主机上拷贝文件:

    $ sudo cp path-file-host /var/lib/docker/aufs/mnt/FULL_CONTAINER_ID/PATH-NEW-FILE   
    或者  
    $ sudo cp path-file-host /var/lib/docker/devicemapper/mnt/123abc<<id>>/rootfs/root

    例子:

    $ docker ps  
      
    CONTAINER ID      IMAGE    COMMAND       CREATED      STATUS       PORTS        NAMES  
      
    d8e703d7e303   solidleon/ssh:latest      /usr/sbin/sshd -D                      cranky_pare  
      
    $ docker inspect -f   '{{.Id}}' cranky_pare  
      
    or   
    $ docker inspect -f   '{{.Id}}' d8e703d7e303  
      
    d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5  
      
    $ sudo cp file.txt /var/lib/docker/aufs/mnt/**d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5 
    

    欢迎关注公众号:程序员面试经验分享(jobbible)

    展开全文
  • 解决:docker容器内可以访问web应用,端口映射到宿主机却无法访问,错误代码:curl: 56 Recv failure: 连接被对方重设 或者 curl: 52 Empty reply from server场景 场景 在Linux系统中利用docker容器部署一个web小...
  • docker run --name wnginx -d -p 9001:80 -v /home/www:/usr/share/nginx/html nginx  --name 别名 ... -v 添加数据卷(映射宿主机目录到容器目录/home/www --》宿主 /usr/share/nginx/html ...
  • 拉取mysql镜像 docker pull mysql:5.7 创建用于挂载的目录 mkdir –p /root/docker/mysql/logs /root/docker/...#将容器中MySQL的3306端口映射到本地的3306端口,并设置登录密码为:123456 docker run --name my...
  • Ⅰ、允许映射容器内应用的服务端口本地宿主机上 Ⅱ、互联机制实现多个容器间通过容器名进行快速访问 这里写目录标题1、端口映射实现容器访问① 从外部访问容器应用2、互联机制实现便捷互访① 创建容器名② 容器...
  • docker创建容器

    2020-12-23 19:59:31
    docker run --name gaoxi-user-1 -p 8082:8080 -v /usr/web/gaoxi-log:/opt/tomcat/...v:指定容器数据卷的映射,xxx:yyy 表示将容器 yyy 目录映射到宿主机的 xxx 目录上,从而访问宿主机的 xxx 目录就相当于访问容器
  • 答:在启动容器时使用-v指定宿主机目录和要映射到容器内部目录,语法如下:  docker run -it -v <host_dir>:<container_dir><container_image_name> <command>  示例:  docker run -...
  • 当我们在容器中安装完环境以后,需要在宿主机的端口上访问到容器中的端口,这时候就需要做端口映射。在开发代码的时候,需要频繁的修改代码,因此要把宿主机上的代码目录共享到容器中,这样容器里面就能访问的代码...
  • linux docker 目录挂载映射

    万次阅读 2019-02-04 20:54:20
    譬如我要启动一个centos容器宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定: # docker run --name test -it --privileged -v /root/test:/root/softcentos:6 /bin/bash /root/test 是宿主机目录 ...
  • 宿主机的/test目录挂载到容器的/soft目录 # docker run -it -v /test:/data/db centos /bin/bash 这样在容器启动后,容器内会自动创建/soft的目录。通过这种方式,我们可以明确一点,即-v参数中,冒号":"前面的目录...
  • Docker 容器技术 — 容器存储

    千次阅读 多人点赞 2020-10-02 10:40:46
    -v 宿主机目录:指定挂载到容器内的目录映射多个宿主机目录,只需要多写几个 -v 即可。 挂载时创建卷 挂载卷: docker run -d -p 80:80 -v /data:/usr/share/nginx/html nginx:latest 设置共享卷,使用同一...
  • 解决方法背景公司做的项目是部署dockerize的tomcat容器上的,将日志映射到了宿主机器的某个目录下,但是出现了一个问题,那就是日志打印的时间有问题,会比宿主机的时间晚8个小时。解决方法一、先查看服务器和容器...
  • 1 本地目录映射到容器目录 docker run -it -v /remote/cn42home1/zhaoqing/work:/work nvdla/vp 2 本地目录copy到容器目录 sudo docker cp ~/nvdla/sw/prebuilt/linux/basic.nvdla caf14f21334a:/usr/local/nvdla...
  • 使用docker创建mysql容器映射端口远程访问 创建mysql容器 该过程会消耗较长时间(根据...// 暴露至宿主机 3306 端口,持久化数据到宿主机 /lib/mysql/data 目录docker run --name mysql5 -v /lib/mysql/data...
  • Docker与CentOS的认识 宿主机:当前的服务器CentOS称之为宿主机 宿主机上的docker看做一个容器 因此,docker所在的服务器成为宿主机 ...挂载的意思就是在宿主机上的某个目录映射到docker某个容器里。 其实就...
  • 容器运行nginx&&挂载宿主机文件

    千次阅读 2020-06-06 13:34:22
    本文记录分享如何将容器中的相关文件(目录)挂载到宿主机上。当前nginx最新version为1.17.10。 安装nginx并启动只需一步操作,但是进行相关配置需要进入到容器中 #d:daemon p映射端口宿主机:容器 docker run -d -p 80...
  • 1.安装nginx docker镜像 获取nginx官方镜像 ...-p 本机端口映射容器的80端口映射到本机的80端口 语句最后一个nginx是使用镜像的名称 访问本地ip测试 2、将nginx关键目录映射到本机 首先.
  • 文章目录docker container 通信容器之间通信宿主机链接容器的服务容器链接宿主机的服务php容器安装xdebug容器链接宿主机测试通信是否成功参考文章 docker container 通信 容器之间通信 容器之间三种方式通信:...
  • Docker 容器基本操作

    2019-02-13 11:38:32
    Docker 容器操作 1. 创建容器 docker run [option] 镜像名 [向启动容器中传入的命令] 常用可选参数说明: ...-v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录,即 宿主机目录:容器目录),可...
  • 三、将本地目录映射到docker容器中 四、将pycharm于docker容器相链接 前言 本文中,将详细讲述如何使用pycharm调用docker中的python环境,并处理宿主机(本地)中的文件。 一、准备工作 本文所需要的工具如下 1....
  • -v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录,即 宿主机目录:容器目录),可以使 用多个-v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后 共享到容器上。 -d 在run...
  • docker容器启动参数

    千次阅读 2018-09-19 19:31:00
    docker run [option] 镜像名 [向启动容器中传入的命令] 常用可选参数说明: ...-v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录,即 宿主机目录:容器目录),可以使 用多个-v 做...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 222
精华内容 88
关键字:

docker映射容器目录到宿主机