[DOC]

复现查看run参数

假如我使用docker run启动了了一个redis容器,而docker run的参数有很多,由于时间太久,我已经忘记了当初的启动参数,也并没有使用docker-compose这样的编排工具。

现在我如何进行重启,如何找回此前的启动命令?有如下几种方式:

  • docker inpsect
  • reckecod
  • runlike

方式1:

docker inspect -f "{{.Name}} {{.Path}} {{.Args}} {{.Config.Cmd}} {{.Config.Env}} {{.Config.Volumes}} {{.Config.Entrypoint}} {{.NetworkSettings.Networks}}" $(docker ps -a -q)

/linuxea_redis /Initialization.sh [] [] [REDIS_CONF=on REQUIRE_PASS=OTdmOWI4ZTM4NTY1M2M4OTZh MASTER_AUTH=OTdmOWI4ZTM4NTY1M2M4OTZh MAXCLIENTS_NUM=30 MAXMEMORY_SIZE=1024M PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin RS_VSON=5.0.0 RS_USER=redis RS_VSON_URL=http://download.redis.io/releases/redis-5.0.0.tar.gz BATADIR=/usr/local/redis DATADIR=/data/redis DATALOG=/data/logs DATACIG=/etc/redis] map[linuxea_volume:{}] [/Initialization.sh] map[host:0xc420182000]

方式2:

借助rekcod打印出更易读的格式docker inspect→docker run ,docker run从现有容器(via docker inspect)反向设计命令。

rekcod可以将以下任何内容转换为docker run命令:

  1. 容器ID /名称(rekcod将调用docker inspect
  2. 包含docker inspect输出的文件的路径
  3. 原始JSON(docker inspect直接传递输出)
#(1)安装install rekcod
$ yum install npm -y && npm i -g rekcod
$ docker ps -qa|rekcod
$ rekcod linuxea_redis
docker run --name linuxea_redis --runtime runc -p 6379:6379/tcp --net host --restart no -h LinuxEA-Node172_25_50_250.cluster.com --expose 26379/tcp --expose 6379/tcp -e 'REDIS_CONF=on' -e 'REQUIRE_PASS=OTdmOWI4ZTM4NTY1M2M4OTZh' -e 'MASTER_AUTH=OTdmOWI4ZTM4NTY1M2M4OTZh' -e 'MAXCLIENTS_NUM=30' -e 'MAXMEMORY_SIZE=1024M' -e 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' -e 'RS_VSON=5.0.0' -e 'RS_USER=redis' -e 'RS_VSON_URL=http://download.redis.io/releases/redis-5.0.0.tar.gz' -e 'BATADIR=/usr/local/redis' -e 'DATADIR=/data/redis' -e 'DATALOG=/data/logs' -e 'DATACIG=/etc/redis' -d -t -i --entrypoint "/Initialization.sh" marksugar/redis:5.0.0

#(2)只安装了Docker
$ docker pull nexdrew/rekcod
$ alias rekcod="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod"
$ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod <container>

方式3:

实际runlike被封装为一个名为assaflavie / runlike 的Docker镜像。

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike YOUR-CONTAINER

#使用别名运行它,例如,将其保存在~/.profile或中~/.bashrc
alias runlike="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike"

#以本地命令运行
runlike YOUR-CONTAINER

安装使用流程

#安装
yum install -y python-pip && pip install runlike #Python2
yum install -y python3 && pip3 install runlike

#用法:
runlike -q <container-name> #使用-q自动换行

#实例
runlike -p linuxea_redis
docker run \
--name=linuxea_redis \
--hostname=LinuxEA-Node172_25_50_250.cluster.com \
--env=REDIS_CONF=on \
--env=REQUIRE_PASS=OTdmOWI4ZTM4NTY1M2M4OTZh \
--env=MASTER_AUTH=OTdmOWI4ZTM4NTY1M2M4OTZh \
--env=MAXCLIENTS_NUM=30 \
--env=MAXMEMORY_SIZE=1024M \
--env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
--env=RS_VSON=5.0.0 \