标签: 17 篇 docker 相关的文章

docker 容器安全与firewalld

docker 容器暴露的端口不会因 firewalld 防火墙策略阻断!

最近发现一个问题,docker run 了几个容器,暴雷了 8080, 9090 等等几个端口,一直以为 CentOS 有 firewalld 防火墙在,加了这些端口只允许内网访问,就可以高枕无忧了。
结果有次查看 netstat,居然有一些国外的 IP 连接。这才知道原来有防火墙,容器也不安全!

阅读全文 ~

修改docker镜像

若有个名为nginx的容器:

docker run -it nginx bash

修改内容后退出,使用docker commit命令提交修改。

Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

Options:
  -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
  -c, --change list      Apply Dockerfile instruction to the created image
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)

如 :

docker commit -a "John Click" -m "add extra plugins" 2ff7f15ca033 nginx:latest

2ff7f15ca033为刚才修改的docker容器id。

阅读全文 ~

podman之docker-compose

podman 3.0开始支持docker-compose,使用docker-compose up
需要先启用podman的api服务 systemctl enable --now podman.socket

20210811152857.png

注意那行Listen,可以执行 export DOCKER_HOST=unix:///run/podman/podman.sock
避免docker-compose运行时报出无法连接的错误:
20210811153045.png

阅读全文 ~

Dockerfile传参及使用

Dockerfile需要传参时,如Dockerfile中有如下声明

ARG base_img=centos:latest
FROM ${base_img}

ARG arch=x86_64

COPY ${arch}/lib /usr/lib

RUN yum install -y nginx
...

在执行docker build时可以通过参数--build-arg进行传参,如

docker build . -t centos:latest -f Dockerfile --build-arg base_img=centos:7 --build-arg arch=amd64
阅读全文 ~

wsl 参考的对象类型不支持尝试的操作

wsl无法使用,闪退。起初怀疑是wsl装的有问题,就将wsl按照 https://docs.microsoft.com/zh-cn/windows/wsl/install-win10 重新安装了一次。
安装了docker-desktop后 这个docker-desktop也是闪退。报出Failed to set version to docker-desktop: exit code: -1
这样的错误。

最终百度到:
powershell (管理员)下执行

netsh winsock reset 

不用重启系统。即可。
这时docker-desktop也可以玩了。

阅读全文 ~

Docker 容器的健康检查

健康检查 (HEALTHCHECK) 指令简介

健康检查 (HEALTHCHECK) 指令告诉 Docker 如何检查容器是否仍在工作。 它能够监测类似一个服务器虽然服务进程仍在运行, 但是陷入了死循环, 不能响应新的请求的情况。

当一个容器有指定健康检查 (HEALTHCHECK) 时, 它除了普通状态之外, 还有健康状态 (health status) 。 健康状态的初始状态是正在启动 (starting) , 一旦通过了一个健康检查, 它将变成健康 (healthy) (不管之前的状态是什么), 经过一定数量的连续失败之后, 它将变成不健康 (unhealthy) 。

阅读全文 ~

docker images filter 镜像查询过滤

找出tag为<none>
docker images -f "dangling=true"

找出tag为<none>的, 只返回image id
docker images -f "dangling=true" -q

根据repository名称和tag模糊过滤,我验证时,如果repository有/或小数点符号,通过*是无法匹配的
docker images --filter=reference='busy*:*libc'

使用beforesince根据时间查找,实际上以repository的名字作为时间分隔,
docker images --filter "before=image1"

docker images --filter "since=image3"

此外还有label, label=<key> or label=<key>=<value>
docker images --filter "label=com.example.version" , 这条我用docker image inspect <image id>,发现几个image的label都是空的,这个有待研究。

阅读全文 ~