Last active
May 23, 2024 15:21
-
-
Save efrecon/8ce9c75d518b6eb863f667442d7bc679 to your computer and use it in GitHub Desktop.
`docker inspect` template to regenerate the `docker run` command that created a container
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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}} |
docker inspect --format "$(curl -s https://gist.githubusercontent.com/efrecon/8ce9c75d518b6eb863f667442d7bc679/raw/run.tpl)" ded0bdd038e4
Template parsing error: template: :22:15: executing "" at <.Mounts>: map has no entry for key "Mounts"
Same error
Thank you for the great work! Unfortunately, I recognized that everything regarding health checks is missing:
--health-cmd="redis-cli
--raw incr ping"
--health-interval=30s
--health-timeout=10s
--health-retries=3
Would it be possible to add them too?
This is fantastically simple and effective. Thank you so much!
thank you so much!
Starred! Simply amazing!
great work! so helpful
great work! so helpful
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@uvlad7
--user
now supported. @QGB try again, I have merged and adapted the changes from @ictus4u