-
-
Save efrecon/8ce9c75d518b6eb863f667442d7bc679 to your computer and use it in GitHub Desktop.
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}} |
@ictus4u You are right, there are two
.Mounts
. The one insideHostConfig
seems to reflect what you provided at the command-line (or docker compose, or ...) and is the one that we want to work with I think. For example, if you use secrets, they will also appear there (marked as read only). I have tried to fix with an extra "if" to see if that helps. @matheusyl can you check if the new version fixes your problems?
Hi.
I'm facing the exact same problem, and the last update dosen't seem to have fixed it; i see those errors and some run file are still empty
Thanks and best regards
For those who are restricted to public internet access can use cat
instead of curl
.
docker inspect --format "$(cat /path_to_file/run.tpl)" name_or_id_of_running_container
Please add
--user {{.Config.User}}
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"
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
@ictus4u You are right, there are two
.Mounts
. The one insideHostConfig
seems to reflect what you provided at the command-line (or docker compose, or ...) and is the one that we want to work with I think. For example, if you use secrets, they will also appear there (marked as read only). I have tried to fix with an extra "if" to see if that helps. @matheusyl can you check if the new version fixes your problems?