公司有一台服务器上运行着一个服务,通过 docker start
启动,已经没有文档记录如何搭建的了。现在需要迁移,记录一下获取 docker run 命令的方法
模版文件来自https://gist.githubusercontent.com/efrecon/8ce9c75d518b6eb863f667442d7bc679/raw/run.tpl
假设容器名是 mysql, 命令后面可以跟容器名或者容器 id。命令如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
| docker inspect --format 'docker run \ --name {{printf "%q" .Name}} \ {{- with .HostConfig}} {{- if .Privileged}} --privileged \ {{- end}} {{- if .AutoRemove}} --rm \ {{- end}} {{- if .Runtime}} --runtime {{printf "%q" .Runtime}} \ {{- end}} {{- range $b := .Binds}} --volume {{printf "%q" $b}} \ {{- end}} {{- range $v := .VolumesFrom}} --volumes-from {{printf "%q" $v}} \ {{- end}} {{- range $l := .Links}} --link {{printf "%q" $l}} \ {{- end}} {{- if index . "Mounts"}} {{- range $m := .Mounts}} --mount type={{.Type}} {{- if $s := index $m "Source"}},source={{$s}}{{- end}} {{- if $t := index $m "Target"}},destination={{$t}}{{- end}} {{- if index $m "ReadOnly"}},readonly{{- end}} {{- if $vo := index $m "VolumeOptions"}} {{- range $i, $v := $vo.Labels}} {{- printf ",volume-label=%s=%s" $i $v}} {{- end}} {{- if $dc := index $vo "DriverConfig" }} {{- if $n := index $dc "Name" }} {{- printf ",volume-driver=%s" $n}} {{- end}} {{- range $i, $v := $dc.Options}} {{- printf ",volume-opt=%s=%s" $i $v}} {{- end}} {{- end}} {{- end}} {{- if $bo := index $m "BindOptions"}} {{- if $p := index $bo "Propagation" }} {{- printf ",bind-propagation=%s" $p}} {{- end}} {{- end}} \ {{- end}} {{- end}} {{- if .PublishAllPorts}} --publish-all \ {{- end}} {{- if .UTSMode}} --uts {{printf "%q" .UTSMode}} \ {{- end}} {{- with .LogConfig}} --log-driver {{printf "%q" .Type}} \ {{- range $o, $v := .Config}} --log-opt {{$o}}={{printf "%q" $v}} \ {{- end}} {{- end}} {{- with .RestartPolicy}} --restart "{{.Name -}} {{- if eq .Name "on-failure"}}:{{.MaximumRetryCount}} {{- end}}" \ {{- end}} {{- range $e := .ExtraHosts}} --add-host {{printf "%q" $e}} \ {{- end}} {{- range $v := .CapAdd}} --cap-add {{printf "%q" $v}} \ {{- end}} {{- range $v := .CapDrop}} --cap-drop {{printf "%q" $v}} \ {{- end}} {{- range $d := .Devices}} --device {{printf "%q" (index $d).PathOnHost}}:{{printf "%q" (index $d).PathInContainer}}:{{(index $d).CgroupPermissions}} \ {{- end}} {{- end}} {{- with .NetworkSettings -}} {{- range $p, $conf := .Ports}} {{- with $conf}} --publish " {{- if $h := (index $conf 0).HostIp}}{{$h}}: {{- end}} {{- (index $conf 0).HostPort}}:{{$p}}" \ {{- end}} {{- end}} {{- range $n, $conf := .Networks}} {{- with $conf}} --network {{printf "%q" $n}} \ {{- range $a := $conf.Aliases}} --network-alias {{printf "%q" $a}} \ {{- end}} {{- end}} {{- end}} {{- end}} {{- with .Config}} {{- if .Hostname}} --hostname {{printf "%q" .Hostname}} \ {{- end}} {{- if .Domainname}} --domainname {{printf "%q" .Domainname}} \ {{- end}} {{- if index . "ExposedPorts"}} {{- range $p, $conf := .ExposedPorts}} --expose {{printf "%q" $p}} \ {{- end}} {{- end}} {{- if .User}} --user {{printf "%q" .User}} \ {{- end}} {{- range $e := .Env}} --env {{printf "%q" $e}} \ {{- end}} {{- range $l, $v := .Labels}} --label {{printf "%q" $l}}={{printf "%q" $v}} \ {{- end}} {{- if not (or .AttachStdin (or .AttachStdout .AttachStderr))}} --detach \ {{- end}} {{- if .AttachStdin}} --attach stdin \ {{- end}} {{- if .AttachStdout}} --attach stdout \ {{- end}} {{- if .AttachStderr}} --attach stderr \ {{- end}} {{- if .Tty}} --tty \ {{- end}} {{- if .OpenStdin}} --interactive \ {{- end}} {{- if .Entrypoint}} {{- /* Since the entry point cannot be overridden from the command line with an array of size over 1, we are fine assuming the default value in such a case. */ -}} {{- if eq (len .Entrypoint) 1 }} --entrypoint " {{- range $i, $v := .Entrypoint}} {{- if $i}} {{end}} {{- $v}} {{- end}}" \ {{- end}} {{- end}} {{printf "%q" .Image}} \ {{range .Cmd}}{{printf "%q " .}}{{- end}} {{- end}}' \ mysql
|
得到的结果和原始的不一样,但是大差不差了。
1 2 3 4
| docker run --rm -v /var/run/docker.sock:/var/run/docker.sock:ro assaflavie/runlike mysql
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock:ro cucker/get_command_4_run_container mysql
|
runlike 的结果也是近似的
或者使用 get_command_4_run_container
1
| docker run --rm -v /var/run/docker.sock:/var/run/docker.sock cucker/get_command_4_run_container mysql
|