分类: docker

docker
  • 解决 error creating overlay mount to /var/lib/docker/overlay2

    最近在centos7.1使用docker运行redis镜像,出现下面的错误:

    ERROR: for ddns  Cannot start service ddns: error creating overlay mount to /var/lib/docker/overlay2/f861b6ba19002faade18e4c75c3772ccafcd09696acf969fab17f005cc7a6eed/merged: invalid argument
    
    ERROR: for mysql  Cannot start service mysql: error creating overlay mount to /var/lib/docker/overlay2/7c378a17a38fc6749c61e3adde2327d542ac7539c6f988864248cf1c832a98c2/merged: invalid argument
    
    ERROR: for redis  Cannot start service redis: error creating overlay mount to /var/lib/docker/overlay2/6f38c8f2d45d87af80a37b0cf1ebf6e4abc96ba356dcce486ed4bc6de309d8f1/merged: invalid argument
    
    ERROR: for ddns  Cannot start service ddns: error creating overlay mount to /var/lib/docker/overlay2/f861b6ba19002faade18e4c75c3772ccafcd09696acf969fab17f005cc7a6eed/merged: invalid argument
    
    ERROR: for mysql  Cannot start service mysql: error creating overlay mount to /var/lib/docker/overlay2/7c378a17a38fc6749c61e3adde2327d542ac7539c6f988864248cf1c832a98c2/merged: invalid argument
    ERROR: Encountered errors while bringing up the project.

    停止docker服务

    systemctl stop docker

    清理镜像

    rm -rf /var/lib/docker

    修改存储类型

    vi /etc/sysconfig/docker-storage

    把空的DOCKER_STORAGE_OPTIONS参数改为overlay:

    DOCKER_STORAGE_OPTIONS="--storage-driver overlay"
    
    vi /etc/sysconfig/docker

    禁用selinux

    方法1:

    去掉option的–selinux-enabled

    方法2:

    永久关闭:输入命令vi /etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,然后保存退出。

    启动docker应该就可以了

    systemctl start docker
  • aliyundrive-webdav

    docker run -d --name=aliyundrive-webdav --restart=unless-stopped -p 8080:8080 \
      -v /etc/aliyundrive-webdav/:/etc/aliyundrive-webdav/ \
      -e REFRESH_TOKEN='your refresh token' \
      -e WEBDAV_AUTH_USER=admin \
      -e WEBDAV_AUTH_PASSWORD=admin \
      messense/aliyundrive-webdav
  • 安装 docker-compose

    1. 最新发行的版本地址:https://github.com/docker/compose/releases
    2. 运行以下命令以下载Docker Compose的当前稳定版本:
    sudo curl -L "https://github.com/docker/compose/releases/download/1.27.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    
    将可执行权限应用于二进制文件:
    sudo chmod +x /usr/local/bin/docker-compose
    注意:如果命令docker-compose在安装后失败,请检查您的路径。您还可以创建指向/usr/bin或路径中任何其他目录的符号链接。
    
    测试安装
    docker-compose --version
    bash 命令补齐
    curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
    卸载docker-compose
    直接移除二进制包即可
    
    sudo rm /usr/local/bin/docker-compose
  • 如何使用 Watchtower 自动更新正在运行的 Docker 容器

    对开发运维人员来说,保持 Docker 容器为最新版本是重要工作之一。手动更新 Docker 容器是一项耗时的工作。这篇文章解释了 Watchtower 是什么,如何安装它,以及在 Linux 中如何 使用 Watchtower 自动更新正在运行的 Docker 容器 。

    Watchtower 是什么?

    Watchtower 是一款自由开源的应用,用来监控运行中的 Docker 容器,并且当它发现基础镜像被更改后,可以自动的更新容器。

    若 Watchtower 发现一个运行中的容器需要更新,它会以发送 SIGTERM 信号的方式,优雅的结束运行中容器的运行。

    它会下载新镜像,然后以最初部署时使用的方式,重启容器。所有文件会在后台自动下载,因此不需要用户的介入。

    在这份指南中,我们将会明白如何在类 Unix 系统中使用 Watchtower 自动更新正在运行的 Docker 容器。

    我已经在 CentOS 和 Ubuntu 中测试了这份指南,所有的 Linux 发行版中操作过程都一样。

    在 Linux 中安装 Watchtower

    可以通过 Docker 镜像的方式下载 Watchtower 。因此,部署它是小事一桩。在你的 Linux 中安装 Docker 镜像,然后运行 Watchtower 立即开始监控 Docker 容器。

    参考下方指导在基于 PRM 和 DEB 包管理系统中安装 Docker

    安装 Docker 后,你可以使用以下命令以 root 用户身份部署 Watchtower 容器:

    # docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower

    如果你已经安装了 Docker 桌面版,以普通用户运行 Watchtower 容器。

    $ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower

    该命令会拉取最新版的 watchtower 镜像,并运行 watchtower 容器。

    输出样例:

    Unable to find image 'containrrr/watchtower:latest' locally
    latest: Pulling from containrrr/watchtower
    1045b2f97fda: Pull complete 
    35a104a262d3: Pull complete 
    1a0671483169: Pull complete 
    Digest: sha256:bbf9794a691b59ed2ed3089fec53844f14ada249ee5e372ff0e595b73f4e9ab3
    Status: Downloaded newer image for containrrr/watchtower:latest
    91c104ef0e9896e8cd5ff30d9f13e728dbfad66443830ec2ac85dde6d7d37564
    Run Watchtower Docker Container

    使用 Watchtower 自动更新 Docker 容器

    在你的系统上,Watchtower 正在和其他容器一起运行。你可以使用一下命令查看运行中的 Docker 容器列表:

    $ docker ps

    输出样例:

    CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                                         NAMES
    91c104ef0e98   containrrr/watchtower       "/watchtower"            14 minutes ago   Up 14 minutes   8080/tcp                                      watchtower
    f90b462b0712   bitnami/wordpress-nginx:6   "/opt/bitnami/script…"   19 minutes ago   Up 19 minutes   0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp   ostechnix-wordpress-1

    正如上方输出所示,watchtower 容器正在和名为 ostechnix-wordpress-1 的容器一起运行。从现在开始,watchtower 会每隔几分钟会检查该容器。

    如果 Watchtower 发现该容器的基础镜像的任何变化,它会优雅的关闭 ostechnix-wordpress-1 容器,然后使用与最初启动它时使用的相同方式,启动新的镜像。

    类似的,它会自动地每隔几分钟检查所有的运行中容器,并自动更新它们。

    Watchtower 如何更新多连接的容器?

    在监视多连接容器时,Watchtower 十分智能。

    假设我们现在运行两个容器。

    $ docker ps

    输出样例:

    CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS          PORTS                                         NAMES
    91c104ef0e98   containrrr/watchtower       "/watchtower"            14 minutes ago   Up 14 minutes   8080/tcp                                      watchtower
    f90b462b0712   bitnami/wordpress-nginx:6   "/opt/bitnami/script…"   19 minutes ago   Up 19 minutes   0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp   ostechnix-wordpress-1
    a895f082438a   bitnami/mariadb:10.6        "/opt/bitnami/script…"   20 minutes ago   Up 19 minutes   3306/tcp                                      ostechnix-mariadb-1
    View Running Docker Containers

    正如你看到的,我们正在运行 ostechnix-wordpress-1 和 ostechnix-mariadb-1 这两个容器。ostechnix-mariadb-1 容器链接到 ostechnix-wordpress-1 容器。

    如果 Watchtower 发现 ostechnix-wordpress-1 容器有个新版本,它会先关闭与之相连接的 ostechnix-mariadb-1 容器 ,然后才会关闭 ostechnix-wordpress-1 容器。

    更新 ostechnix-wordpress-1 容器后,Watchtower 会以正确的顺序,且与最初启动它们时使用的相同方式,重启这两个容器,以便应用程序正确恢复。在我们的例子中,首先启动的是 ostechnix-mariadb-1 容器,然后是 ostechnix-wordpress-1 容器,以确保连接能够继续运行。

    监控特定容器

    默认情况下,Watchtower 将监控在它所指向的 Docker 守护进程中运行的所有 Docker 容器。

    不过,你可以像下面这样,通过指定容器名称限制 Watchtower 监视特定的 Docker 容器。

    $ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower ostechnix-wordpress-1

    在上方的例子中,watchtower 会忽略其他容器,只监视名为 ostechnix-wordpress-1 的容器更新情况。

    如果你不指定任何参数,Watchtower 会照常监视所有运行中的 Docker 容器。

    发送提示

    或许你想收到容器更新的通知。你可以通过电子邮件、Slack 、MSTeams 以及 Gotify 发送通知。

    下面这个例子展示了如何通过电子邮件发送通知。假设你已经设置了 SMTP 服务器。

    docker run -d \
      --name watchtower \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -e WATCHTOWER_NOTIFICATIONS=email \
      -e WATCHTOWER_NOTIFICATION_EMAIL_FROM=fromaddress@gmail.com \
      -e WATCHTOWER_NOTIFICATION_EMAIL_TO=toaddress@gmail.com \
      -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.gmail.com \
      -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 \
      -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=fromaddress@gmail.com \
      -e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=app_password \
      -e WATCHTOWER_NOTIFICATION_EMAIL_DELAY=2 \
      containrrr/watchtower

    参考下方 Watchtower Github 仓库和 Watchtower 官方主页获取更多信息:

  • ⽹⼼云容器版产品「容器魔⽅」介绍

    一、 什么是⽹⼼云容器版产品「容器魔⽅」?

    「容器魔方」由网心云推出的一款docker容器镜像软件,通过简单安装后即可快速加入网心云共享计算生态网络,为网心科技星域云贡献带宽和存储资源,用户根据每日的贡献量可获得相应的现金收益回报。网心科技星域云通过先进的边缘编排技术,将千家万户的节点连接成一张边缘云计算网络,为B端客户提供全球领先的、优质低成本的边缘计算服务。目前支持:koolshare、群晖、树莓派等支持docker的设备(arm32、aarch64、x86_64)。

    二、安装激活

    1.运行容器:

    docker run -d --name=wxedge --restart=always --privileged --net=host  --tmpfs /run --tmpfs /tmp -v /storage:/storage:rw  registry.hub.docker.com/onething1/wxedge

    必选参数说明:

    –privileged 必须打开(爱快docker不支持)。

    –net 目前只支持host(推荐)和macvlan两种网络模式(不熟悉docker和网络知识的用户不要尝试macvlan,非常复杂!)。

    “磁盘路径”是磁盘的目录,请根据自己实际磁盘目录更改,必须挂载到容器内的/storage目录,推荐磁盘是ext4文件系统,至少需要50G以上的空间,建议是固态硬盘。

    可选参数说明(建议新手都不要设置):

    -e NIC=eth0 有多网卡多线路时,可以使用该参数指定路由网卡,不配置会自动选默认路由网卡,如果是openwrt系统,可以使用-e NIC=br-lan,业务申请到和局域网同一个网段的IP。

    -e REC=false 第一次安装设置为false时,不会启动默认任务,默认为true,仅第一次安装有效。

    -e LISTEN_ADDR=”0.0.0.0:28888″ 支持设置绑定页面的监听地址和端口,监听全地址设置-e LISTEN_ADDR=”:28888″,默认监听全地址18888端口。多开容器也可以参考用该参数,比如容器A使用参数-e LISTEN_ADDR=”:18888″,容器B使用参数 -e LISTEN_ADDR=”:28888″(已经实现同一业务可多次添加,不建议多开容器)

    -v 磁盘路径:/var/lib/containerd 如果系统盘较小时,可以增加该参数修改安装路径,注意“磁盘路径”修改成自己的磁盘目录。

    2.升级容器:

    升级不需要删除原来的缓存,只升级镜像,原来的缓存是可以复用的,但注意挂载到容器中的路径必须是升级前的路径。如果发现生成新的SN,必定是挂载的路径错了。

    手动升级

    docker stop wxedge

    docker rm wxedge

    docker rmi registry.hub.docker.com/onething1/wxedge

    docker pull registry.hub.docker.com/onething1/wxedge

    docker run -d –name=wxedge –restart=always –privileged –net=host –tmpfs /run –tmpfs /tmp -v 磁盘路径:/storage:rw registry.hub.docker.com/onething1/wxedge

    “磁盘路径”要改成升级前的路径

    自动升级(containrrr/watchtower非网心云官方镜像,仅供参考,有问题请自行解决,强烈推荐)

    docker run -d –name watchtower –restart always -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower –cleanup wxedge

    3.存储迁移

    容器启动成功后,会在挂载目录生成一个wxnode的文件,该文件是设备的唯一标识与账号绑定,请务必做好备份,对于多次恶意删除wxnode的用户,将拒绝激活。换盘或者更换挂载目录时,要将wxnode迁移至新的挂载目录下,不需要app重新绑定。跨cpu架构的wxnode和缓存数据不能通用,如将x86的wxnode和缓存数据迁移到arm64的设备上是无法使用的。

    三、网心云容器魔方接口文档

    https://help.onethingcloud.com/7cb4/3ed5/1e3a

    四、设备绑定

    打开浏览器(推荐谷歌浏览器),输入http://ip:18888(ip替换成安装设备的ip),比如http://192.168.1.10:18888

    五、产品指南&教程

    「产品指南」:

    https://help.onethingcloud.com/caa9/a0fe/b6b3

    「群晖安装激活教程」:

    https://help.onethingcloud.com/7cb4/3ed5/9899

    「koolshare安装激活教程」:

    https://help.onethingcloud.com/7cb4/3ed5/a209

    「树莓派&命令行安装激活教程」:

    https://help.onethingcloud.com/7cb4/3ed5/8907

    六、技术和经验交流

    QQ群1(已满):947847221

    QQ群2:235763379

    加群备注:wxedge

    七、友情链接(非官方教程,可参考)

    1.视频安装教程 https://www.bilibili.com/video/BV1w341187MG?spm_id_from=333.999.0.0

    2.debian安装教程 https://zhuanlan.zhihu.com/p/380208961

    3.portainer面板安装教程 https://post.smzdm.com/p/ag45dprw/

    4.威联通安装教程 https://bbs.onethingcloud.com/forum.php?mod=viewthread&tid=800&highlight=%E5%A8%81%E8%81%94%E9%80%9A

    5.低版本群晖(5.2版本)安装教程 https://bbs.onethingcloud.com/forum.php?mod=viewthread&tid=1583&highlight=%E5%AE%B9%E5%99%A8

  • docker centos7 安装sshd

    1. 拉取镜像

    docker pull cenntos:7
    
    1. 运行容器并且附加端口映射

    docker run -itd -p 22:22 --name centos7 centos:7 
    

    3.进入到容器

    docker attach 容器Id
    

    4.安装系列工具

    yum -y update
    yum install passwd openssl openssh-server vim -y
    

    5.启动sshd服务

    /usr/sbin/sshd -D &
    

    6.报错如下

    Could not load host key: /etc/ssh/ssh_host_rsa_key
    Could not load host key: /etc/ssh/ssh_host_ecdsa_key
    Could not load host key: /etc/ssh/ssh_host_ed25519_key
    

    7.解决错误并且重新运行

    ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N '' 
    ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
    ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''
    

    8.修改配置文件

    //UsePAM yes 改为 UsePAM no
    //UsePrivilegeSeparation sandbox 改为 UsePrivilegeSeparation no
    sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config
    sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config
    
    1. 重新运行sshd服务

    /usr/sbin/sshd -D &

    10.修改密码

    passwd root

    11.使用putty或者xshell或者finalshell就可以连接登陆使用了。

    网络工具安装:

    yum search ifconfig

    通过yum search 这个命令我们发现ifconfig这个命令是在net-tools.x86_64这个包里,接下来我们安装这个包就行了

    运行 yum install net-tools   就OK 了

    yum install net-tools

    即可显示当前服务器上所有端口及进程服务,与grep结合可查看某个具体端口及服务情况··

    netstat -ntlp   //查看当前所有tcp端口·

    netstat -ntulp |grep 80   //查看所有80端口使用情况·

    netstat -an | grep 3306   //查看所有3306端口使用情况·

    ssh 命令不识别:

    yum -y install openssh-clients
  • docker 启动mq 服务

    mq:
            image: houlijiang/rabbitmq
            container_name: "mq"
            restart: always
            environment: 
                - TIME_ZONE=Asia/Shanghai #用户 
                - RABBITMQ_DEFAULT_USER=admin #密码 
                - RABBITMQ_DEFAULT_PASS=admin 
            volumes: 
                - /etc/localtime:/etc/localtime 
                - /etc/timezone:/etc/timezone 
                - /data/rabbitmq/db:/var/lib/rabbitmq/mnesia/rabbit@my-rabbit
            expose:
                - "15672"
                - "5672"
            ports:
                - "15672:15672"
                - "5672:5672"
            networks:
                - dev
  • docker 启动redis服务

    redis:
            image: redis:latest
            container_name: "redis"
            restart: always
            expose:
                - "6379"
            ports:
                - "6379:6379"
            networks:
                - dev
            command: --requirepass 123456
  • 延时队列服务启动docker

     rabbitmq:
        image: lianlianyi/rabbitmq:3.9.13-management-alpine-delayed
        ports:
          - 15672:15672
          - 5672:5672
        environment:
          - TIME_ZONE=Asia/Shanghai
          - RABBITMQ_DEFAULT_USER=admin
          - RABBITMQ_DEFAULT_PASS=admin
        volumes:
          - /etc/localtime:/etc/localtime
          - /etc/timezone:/etc/timezone
          - ./data/rabbitmq/db:/var/lib/rabbitmq/mnesia/rabbit@my-rabbit
  • docker overlay2占用大量磁盘空间处理方法

    简单办法

    多看了一下资料,发现可以使用 docker system prune来自动清理空间,参考下面:

    • 该指令默认会清除所有如下资源:
      • 已停止的容器(container)
      • 未被任何容器所使用的卷(volume)
      • 未被任何容器所关联的网络(network)
      • 所有悬空镜像(image)。
    • 指令默认只会清除悬空镜像,未被使用的镜像不会被删除。
    • 添加 -a 或 –all 参数后,可以一并清除所有未使用的镜像和悬空镜像。
    • 可以添加 -f 或 –force 参数用以忽略相关告警确认信息。
    • 指令结尾处会显示总计清理释放的空间大小。
      https://yq.aliyun.com/articles/272173 )

    另外,使用下面命令可以查看docker所占的硬盘大小,如:
    在这里插入图片描述

    使用docker,基本上把官方文档的入门教程看完,就能用了。
    再自己打个包试试,基本上就OK了。后面遇到问题再深入,都可以。