新建一个脚本文件

touch script.sh && chmod +x script.sh

脚本代码

#!/bin/bash

# 检查是否提供了容器ID或名称
if [ -z "$1" ]; then
  echo "Usage: $0 <container_id_or_name>"
  exit 1
fi

CONTAINER=$1

# 获取容器名
NAME=$(docker inspect --format='{{.Name}}' $CONTAINER | cut -c 2-)

# 获取镜像名
IMAGE=$(docker inspect --format='{{.Config.Image}}' $CONTAINER)

# 获取命令
CMD=$(docker inspect --format='{{.Config.Cmd}}' $CONTAINER | sed 's/[][]//g' | tr -d ',')
if [ -n "$CMD" ]; then
  CMD="--entrypoint $CMD"
fi

# 获取端口映射
PORTS=$(docker inspect --format='{{range $p, $conf := .HostConfig.PortBindings}}-p {{(index $conf 0).HostPort}}:{{$p}} {{end}}' $CONTAINER)

# 获取卷映射
VOLUMES=$(docker inspect --format='{{range .Mounts}}-v {{.Source}}:{{.Destination}} {{end}}' $CONTAINER)

# 获取环境变量
ENVS=$(docker inspect --format='{{range .Config.Env}}-e {{.}} {{end}}' $CONTAINER)

# 获取重启策略
RESTART_POLICY=$(docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' $CONTAINER)
if [ "$RESTART_POLICY" != "no" ]; then
  RESTART="--restart $RESTART_POLICY"
fi

# 构建docker run命令
CMD="docker run --name $NAME $PORTS $VOLUMES $ENVS $RESTART $CMD -d $IMAGE"

# 输出命令
echo $CMD

执行

sh ./script.sh fed2b02d14bf2c6