精华内容
下载资源
问答
  • docker容器内无法删除文件

    万次阅读 2019-08-27 16:13:51
    docker容器内无法删除文件 dockerfile 或者在容器内执行完rm -rf之后,文件全部变成??? ??? 原因: centos默认使用的是xfs文件系统,与docker默认的overlay2存储驱动不匹配,因此无法删除 具体可以参考...

    问题:

    在docker容器内无法删除文件

    dockerfile里

    或者在容器内执行完rm -rf之后,文件全部变成??? ???

    原因:

    centos默认使用的是xfs文件系统,与docker默认的overlay2存储驱动不匹配,因此无法删除

    具体可以参考一下网址:https://www.jianshu.com/p/00ffd8df6010

    1. 必须在格式化为xfs的时候,指定ftype=1,不然docker可能会出现未知错误

    查看当前操作系统是否支持overlay

    lsmod|grep over

    如果没有输出,表示不支持,如果是以下结果,表示支持

    可以通过以下命令开启overlay

    modprobe overlay

    docker官方建议使用overlay2

    2. xfs文件系统的d_type

    d_type是Linux内核的一个术语,表示“目录条目类型”,目录条目是文件系统上目录信息的一个数据结构,d_type就是这个数据结果的一个字段

    3. docker在overlay2(xfs文件系统)需要d_type

    不论是overlay还是overlay2,底层文件系统都是overlayfs,overlayfs文件系统,需要d_type看文件的操作是否被正确的处理

    docker info

    用来检查docker服务,是否在使用overlay的时候正确使用d_type

    如果在不支持d_type的overlay驱动下使用docker,在docker操作文件的时候,可能会遇到一些问题,比如无法删除某些目录或者文件

    检测在当前的文件系统,是否支持d_type

    xfs_info /

    0表示不支持

    解决方法:

    1. 只能通过重做文件系统来解决,不能在已经存在的操作系统上进行修改

     备份数据

     重新创建文件系统

     恢复备份数据

    mkfs.xfs -n ftype=1 /path/to/your/device

    2. 第一个方法太复杂

     docker换个文件驱动,该systemd unit file, 加参数指定老的devicemapper,不过后果是会把image清空

    /usr/lib/systemd/system/docker.service

    ExecStart=/usr/bin/dockerd --storage-driver=devicemapper

    systemctl daemon-reload

    systemctl restart docker

     

     或者更简单的方法

    修改/etc/docker/daemon.json文件

    {
    "live-restore": true,
    "registry-mirrors": ["http://dockerhub.azk8s.cn"],
    "data-root": "/disk/docker1/nn1",
    "storage-driver": "devicemapper"
    }

    然后重启docker即可 

    展开全文
  • docker容器内无法删除文件 dockerfile 或者在容器内执行完rm -rf之后,文件全部变成??? ??? 原因: centos默认使用的是xfs文件系统,与docker默认的overlay2存储驱动不匹配,因此无法删除 具体可以...

    转载于:https://blog.csdn.net/weixin_42670653/article/details/100042953

    问题:

    在docker容器内无法删除文件

    dockerfile里

    或者在容器内执行完rm -rf之后,文件全部变成??? ???

    原因:

    centos默认使用的是xfs文件系统,与docker默认的overlay2存储驱动不匹配,因此无法删除

    具体可以参考一下网址:https://www.jianshu.com/p/00ffd8df6010

    1. 必须在格式化为xfs的时候,指定ftype=1,不然docker可能会出现未知错误

    查看当前操作系统是否支持overlay

    lsmod|grep over

    如果没有输出,表示不支持,如果是以下结果,表示支持

    可以通过以下命令开启overlay

    modprobe overlay

    docker官方建议使用overlay2

    2. xfs文件系统的d_type

    d_type是Linux内核的一个术语,表示“目录条目类型”,目录条目是文件系统上目录信息的一个数据结构,d_type就是这个数据结果的一个字段

    3. docker在overlay2(xfs文件系统)需要d_type

    不论是overlay还是overlay2,底层文件系统都是overlayfs,overlayfs文件系统,需要d_type看文件的操作是否被正确的处理

    docker info

    用来检查docker服务,是否在使用overlay的时候正确使用d_type

    如果在不支持d_type的overlay驱动下使用docker,在docker操作文件的时候,可能会遇到一些问题,比如无法删除某些目录或者文件

    检测在当前的文件系统,是否支持d_type

    xfs_info /

    0表示不支持

    解决方法:

    1. 只能通过重做文件系统来解决,不能在已经存在的操作系统上进行修改

     备份数据

     重新创建文件系统

     恢复备份数据

    mkfs.xfs -n ftype=1 /path/to/your/device

    2. 第一个方法太复杂

     docker换个文件驱动,该systemd unit file, 加参数指定老的devicemapper,不过后果是会把image清空

    /usr/lib/systemd/system/docker.service

    ExecStart=/usr/bin/dockerd --storage-driver=devicemapper

    systemctl daemon-reload

    systemctl restart docker

     或者更简单的方法

    修改/etc/docker/daemon.json文件

    {
    "live-restore": true,
    "registry-mirrors": ["http://dockerhub.azk8s.cn"],
    "data-root": "/disk/docker1/nn1",
    "storage-driver": "devicemapper"
    }

    然后重启docker即可 

    展开全文
  • docker容器应用的文件权限问题

    千次阅读 2020-09-08 14:19:14
    原因是docker容器里面,umask值是0022。 [root@hostname logs]<20200423 20:47:57># umask 0002 [root@hostname logs]<20200423 20:46:02># docker exec -it 18becb148a65 /bin/bash bash-4.2$ umask ...

    文件权限问题

    ​ 投产后,程序产生的文件按权限是644。原因是docker容器里面,umask值是0022。

    [root@hostname logs]<20200423 20:47:57># umask
    0002
    [root@hostname logs]<20200423 20:46:02># docker exec -it 18becb148a65 /bin/bash
    bash-4.2$ umask
    0022
    

    ​ 宿主机umask是0002,容器里面是0022,为什么会这样呢?

    ​ 进入容器里面,查看/etc/bashrc文件

    bash-4.2$ cat /etc/bashrc
    # /etc/bashrc
    
    # System wide functions and aliases
    # Environment stuff goes in /etc/profile
    
    # It's NOT a good idea to change this file unless you know what you
    # are doing. It's much better to create a custom.sh shell script in
    # /etc/profile.d/ to make custom changes to your environment, as this
    # will prevent the need for merging in future updates.
    
    # are we an interactive shell?
    if [ "$PS1" ]; then
      if [ -z "$PROMPT_COMMAND" ]; then
        case $TERM in
        xterm*|vte*)
          if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
              PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
          elif [ "${VTE_VERSION:-0}" -ge 3405 ]; then
              PROMPT_COMMAND="__vte_prompt_command"
          else
              PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
          fi
          ;;
        screen*)
          if [ -e /etc/sysconfig/bash-prompt-screen ]; then
              PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
          else
              PROMPT_COMMAND='printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
          fi
          ;;
        *)
          [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default
          ;;
        esac
      fi
      # Turn on parallel history
      shopt -s histappend
      history -a
      # Turn on checkwinsize
      shopt -s checkwinsize
      [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
      # You might want to have e.g. tty in prompt (e.g. more virtual machines)
      # and console windows
      # If you want to do so, just add e.g.
      # if [ "$PS1" ]; then
      #   PS1="[\u@\h:\l \W]\\$ "
      # fi
      # to your custom modification shell script in /etc/profile.d/ directory
    fi
    
    if ! shopt -q login_shell ; then # We're not a login shell
        # Need to redefine pathmunge, it get's undefined at the end of /etc/profile
        pathmunge () {
            case ":${PATH}:" in
                *:"$1":*)
                    ;;
                *)
                    if [ "$2" = "after" ] ; then
                        PATH=$PATH:$1
                    else
                        PATH=$1:$PATH
                    fi
            esac
        }
    
        # By default, we want umask to get set. This sets it for non-login shell.
        # Current threshold for system reserved uid/gids is 200
        # You could check uidgid reservation validity in
        # /usr/share/doc/setup-*/uidgid file
        if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
           umask 002
        else
           umask 022
        fi
    
        SHELL=/bin/bash
        # Only display echos from profile.d scripts if we are no login shell
        # and interactive - otherwise just process them to set envvars
        for i in /etc/profile.d/*.sh; do
            if [ -r "$i" ]; then
                if [ "$PS1" ]; then
                    . "$i"
                else
                    . "$i" >/dev/null
                fi
            fi
        done
    
        unset i
        unset -f pathmunge
    fi
    # vim:ts=4:sw=4
    

    ​ 从71-75行,可以发现当uid和gid不等时,执行 umask 0022

    ​ 而容器的启动用户 uid 和 gid确实不相等。

    设置容器里面应用的umask值为0002

    ​ 容器启动后,在应用的启动脚本中添加umask 0002如下:

    #!/bin/sh
    
    umask 0002
    
    #省略其他启动内容
    

    ​ 添加第三行。

    ​ 修改后,进入容器,发现umask值仍然是0022,但是应用写出来的文件权限变成了664。

    -rw-rw-r-- 1 testuser testuser   8772 Apr 23 21:00 test.error.log
    
    展开全文
  • Docker容器文件操作

    千次阅读 2020-03-01 22:39:06
    1.宿主机的内容拷贝到启动的docker容器中 1查看docker容器状态 docker ps-a 2如果没有启动docker容器则启动docker容器 docker start 容器名或者容器ID 3.进入容器 docker exec -it 容器名/容器ID /bin/bash 4....

    1.宿主机的内容拷贝到启动的docker容器中

    1查看docker容器状态

    docker ps-a 
    

    2如果没有启动docker容器则启动docker容器

    docker start 容器名或者容器ID
    

    3.进入容器

    docker exec -it 容器名/容器ID  /bin/bash
    

    4.克隆宿主机会话并在宿主机创立文件
    (1)进入容器的根目录

    cd /
    

    (2)创建jhj文件,并写入内容123456

    echo 123456 > jhj
    

    (3)拷贝到docker容器中

    docker cp 要拷贝的宿主机文件或目录 容器名称:容器文件或目录
    

    举例因为文件是在根目录,所以拷贝方法注意:容器的ID后面接的:并且之间没有空格

    docker cp /jhj2 a42ab1c81128:/jhj2 
    

    所以在容器下面也能查看到这个文件
    在这里插入图片描述

    将docker容器中的文件拷贝到宿主机

    1先在docker容器下面创建一个文件

    echo 123456 >jhj
    

    2拷贝文件

    docker cp 容器名称:要拷贝的容器文件或目录 宿主机文件或目录
    

    以根目录创建文件为例展示命令注意容器iID后面接的:与容器ID之间没有空格,后面接将要复制的文件地址再空格接复制到宿主机的位置

     docker cp a42ab1c81128:/jhj / 
    

    数据目录挂载(目录映射)

    我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。使用 -v 选项(也就是docker帮我们实时更新文件)

    docker run -id -v /宿主机绝对路径目录:/docker容器内目录 --name=容器名 镜像名
    

    举例宿主机和docker容器都在opt文件夹下面映射
    (1)生成一个数据目录挂载的docker容器

     docker run -id -v /opt:/opt --name=jhj6 centos:7
    

    在这里插入图片描述
    (2)在宿主机的映射文件夹中修改东西,(添加jhj文件)
    注意写入文件的时候的echo后面文字与>之间有空格

    echo jhjjhj >/opt/jhj.txt
    

    在这里插入图片描述
    (3)查看docker容器之中是否创建
    在这里插入图片描述

    docker 容器数据目录挂载并设置只读权限

    实现挂载的目录只有 只读(Read-only)权限,命令如下 :

    docker run -id -v /宿主机绝对路径目录:/容器内目录:ro --name=容器名 镜像名
    

    (1)例如宿主机创建jhj文件docker创建lcr文件夹(当然如果没有创建的时候它会自动生成)

    docker run -id -v /jhj:/lcr:ro --name=jhj7 centos:7
    

    在这里插入图片描述
    当然我这里用的是-it这样创建的容器,创建好了就会自动进入容器,如果用exit命令退出,容器就会关闭,所以用cotrl+q+p就能退到后台不会关闭容器

    (2)因为前面的是用jhj作为文本形式,所以在宿主容器中jhj没有被创建也就是文本形式存在,所以docker容器中lcr被创建也是文本形式创建
    在这里插入图片描述
    在这里插入图片描述
    由图可见在docker容器中操作lcr文件不能保存只能readOnly

    查看容器详情

    查看容器运行内部细节,比如可看容器的IP

    docker inspect 容器名:容器ID
    

    查看容器IP

    docker inspect --format='{{.NetworkSettings.IPAddress}}` 容器名
    

    删除容器注意只能删除停止的容器

    docker rm `docker ps -a -q`
    
    展开全文
  • 首先我们需要知道Docker的文件系统如何工作,Docker镜像是由多个文件...该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏,当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失。在Do...
  • docker容器中配置文件修改错误,导致容器无法启动 问题 在elasticsearch加入中文分词器ik时,在容器中配置修改错误,导致elasticsearch启动不了 解决方案 [root@blue elk]# cd /var/lib/docker/overlay2/ [root@...
  • docker容器文件的上传与下载

    万次阅读 2017-08-18 23:33:10
    docker容器文件的上传与下载。
  • docker如何删除容器里文件

    千次阅读 2021-05-27 16:24:13
    docker inspect 容器Id 先使用docker inspect 查询出容器的所有信息 然后找到他的Mounts 下的Source,就是容器在宿主机中的位置 我的路径是 cd /home/data/docker/docker/volumes/509ada780c40cd8ea226c5507929e
  • 如何访问Docker容器外部的文件

    千次阅读 2020-08-30 19:34:26
    因此,现在我们可以运行Node应用程序,所有日志都将存储在主机中,而不是Docker容器中。 Note that the examplenode app does not generate any log in /usr/src/app/logs, it’s just an example and you would ...
  • 不能从 image 直接保存文件,但可以利用 docker cp 操作从容器中将 .jar文件拷贝出来。但注意执行docker cp 操作时,容器必须处于running状态,不能对刚创建好的container以及异常的container操作。 ...
  • CentoS7 下 docker容器命令的使用 docker容器相比于虚拟机来说,比如一个虚拟机可以运行10个web服务器,那么用docker的话, 就可能运行15个web服务器,,节省了许多空间和内存等等,个人理解 docker pull nginx ...
  • docker容器中的配置文件复制到主机中,然后在主机中修改,修改完成后再复制到docker容器中 1. 复制docker容器文件到主机中 docker cp [容器id]:docker容器中配置文件路径 主机路径docker cp mysql:/etc/mysql...
  • Docker 容器化技术介绍(一) 之 虚拟化技术 Docker 容器化技术介绍(二) 之 Docker 简介 Docker 容器化技术介绍(三) 之 Docker 组件 Docker 容器化技术介绍(四) 之 Docker的安装与启动 Docker 容器化技术...
  • Docker容器文件复制与挂载从宿主机复制到容器从容器复制到宿主机宿主机文件夹挂载到容器挂载使用场景举例 从宿主机复制到容器 docker cp 宿主机本地路径 容器名字/ID:容器路径 docker cp /root/123.txt ...
  • 1. 查找需要修改的容器ID 这里是:7c4a586505d2 2. 找到需要编辑的文件的位置 $ sudo docker exec -it registry /bin/bash root@7c4a586505d2:/etc/docker/registry# ls -l total 4 -rw-rw-r-- 1 root root 349 Jun...
  • 容器挂载 docker run -d -it --name logstash -p 4560:4560 \ --link elasticsearch:es \ -e TZ="Asia/Shanghai" \ -v /mydata/logstash/pipeline/:/usr/share/logstash/pipeline/ \ -v /mydata/logstash/config/:/...
  • docker容器内执行SQL文件

    千次阅读 2020-12-10 09:41:04
    docker cp SQL文件路径 MySQL容器名:/ # 将Linux上指定的SQL文件拷贝至容器内部目录(/为根目录) docker ps # 列出所有容器信息,找到MySQL容器容器ID(CONTOINER ID) docker exec -it 容器ID /bin/bash # ...
  • xshell 修改docker容器文件重新启动 1.xshell 本地 ssh 10.0.0.1 选择证书登录 2. ls 查看文件目录 pwd 查看当前目录路径 docker ps 查看当前运行容器 docker exec -it 容器名称 /bin/bash 3. 进入容器相应的...
  • docker容器里安装ssh

    千次阅读 2017-08-03 14:35:58
    docker安装ssh 通过命令行安装 1.pull ubuntu镜像 docker pull ubuntu:latest 2.启动并进入bash docker run -it -d ubuntu:lastest /bin/bash # 查看刚刚运行容器的id docker ps # 在容器中执行bash命令 docker...
  • 我们在上篇介绍了容器技术中资源隔离与限制docker容器技术基础之linux cgroup、namespace 这篇小作文我们要尝试学习容器的另外一个重要技术之联合文件系统之OverlayFS,在介绍OverlayFS之前我们会学习一下镜像、容器...
  • 使用镜像启动容器: $ docker run -itd --restart=always --privileged=true --net='bridge' --name kooi -p 80:80 -p 25770:25770 -p 22000:22 192.168.0.77:5000/mmox:env /sbin/init 注: -p: 指定端口映射,...
  • 将主机的文件复制到容器里: sudo docker cp 主机目录 容器ID:容器目录 退出container 输入: exit 1 或者按键: Ctrl + C 进入容器:(不要用这种 docker attach) docker attach 44fc0f0582d9 但是这种方式...
  • Docker容器命令

    千次阅读 2019-06-12 11:48:05
    Docker容器命令 文章目录Docker容器命令1. docker运行(创建)容器命令2. docker查看容器命令3. docker退出容器命令4. docker启动容器命令5. docker重启容器命令6. docker停止容器命令7. docker删除容器命令8. docker...
  • 删除docker容器日志

    千次阅读 2019-04-25 14:03:23
    docker容器日志导致主机磁盘空间满了。docker logs -f container_name噼里啪啦一大堆,很占用空间,不用的日志可以清理掉了。 2. 解决方法 2.1 找出Docker容器日志 在linux上,容器日志一般存放在/var/lib/docker...
  • Docker 容器

    千次阅读 2018-05-29 17:41:15
    启动容器 新建并启动 启动已终止容器 后台运行 ...  容器Docker 又一核心概念。简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一...
  • docker操作容器文件

    千次阅读 2019-01-09 13:01:32
    docker镜像内的文件互相拷贝 1、将本地文件拷贝到docker 镜像内 docker cp /Users/howey... docker cp 本地路径 容器Id或name:容器目录   2、将docker文件拷贝到本地文件夹内 docker cp 749056ea1637:/User...
  • Docker修改容器内部文件的方法

    千次阅读 2020-05-11 21:15:56
    不过不推荐这种形式,因为里边的文件是临时的,容器删除之后,配置就失效了,需要从新配置。 apt-get update apt-get install vim 2、通过docker cp拷贝进行修改 可以通过下面的代码将需要修改的文件拷贝出来
  • Docker 容器技术

    千次阅读 2020-09-20 12:51:28
    Docker容器技术 概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会...
  • docker 容器

    2015-09-07 10:12:01
    容器是docker的另一个核心概念 简单地说,容器是镜像的一个运行实例,所不同的是,它带有额外的可写文件层。 如果认为虚拟机是模拟运行的一...那么docker容器就是独立运行的一个或一组应用,以及它们的必须运行环境。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 69,493
精华内容 27,797
关键字:

docker容器里删除文件