docker-compose 文件中哪些地方允许使用 Go 模板?
Where are Go templates allowed in docker-compose files?
标题不言自明:我找不到描述在撰写文件中允许使用 Go 模板的位置的文档。
换句话说,我想知道支持以下哪项:
version: "3.7"
services:
whoami:
image: "containous/whoami"
environment:
- VALUE='{{.Name}}'
- NAME_{{.Name}}='NAME'
deploy:
labels:
- value={{.Name}}
- name_{{.Name}}=NAME
networks:
- {{.Name}}
Go 模板是 Go 标准库的一部分。 docker-compose
是一个单独的应用程序,作为 docker
的一部分。
1.声明您的模板。
您可以在 Go
代码中将模板声明为 const
,或者将其放在文件中。
const composeTemplate = `version: "3.7"
services:
whoami:
image: "containous/whoami"
environment:
- VALUE='{{.Name}}'
- NAME_{{.Name}}='NAME'
deploy:
labels:
- value={{.Name}}
- name_{{.Name}}=NAME
networks:
- {{.Name}}
`
2。为您的模板配置。
创建将填充并用于执行模板的配置类型。
type Config struct {
Name string
}
3。使用 config.
执行您的模板
conf := &Config{Name: "MyService"}
tpl, err := template.New("myservice").Parse(composeTemplate)
if err != nil {
// Handle error.
}
var output bytes.Buffer
err = tpl.Execute(&output, conf)
if err != nil {
// Handle error.
}
4.将输出写入文件。
err = ioutil.WriteFile("myservice-compose.yml", output.Bytes(), 0644)
if err != nil {
// Handle error.
}
祝你好运!
我一直在搜索,显然 official Docker documentation 中实际上提供了信息,即使它没有明确引用 docker 撰写文件格式。
特别是:
You can use templates for some flags of service create, using the
syntax provided by the Go’s text/template package.
The supported flags are the following :
--hostname
--mount
--env
由于未列出 --labels
,我们应该假设 text/template 不允许替换。
我很好奇“文档在哪里?”就此而言,是的,它几乎可以正常工作。 docker-compose
是另一个解析 yaml 文件以提供 docker 客户端接口以向 docker 守护程序发送命令的应用程序,或者至少这是我的理解,因为它看起来像 golang 模板通过通过并被替换。
这是一个使用示例
https://github.com/lovelysystems/rabbitmq-swarm-cluster/blob/master/docker-compose.yml
更多相关信息:
https://github.com/moby/moby/issues/37377
我认为打开一个新案例是个好主意,但谁维护 docker.com 文档?
标题不言自明:我找不到描述在撰写文件中允许使用 Go 模板的位置的文档。
换句话说,我想知道支持以下哪项:
version: "3.7"
services:
whoami:
image: "containous/whoami"
environment:
- VALUE='{{.Name}}'
- NAME_{{.Name}}='NAME'
deploy:
labels:
- value={{.Name}}
- name_{{.Name}}=NAME
networks:
- {{.Name}}
Go 模板是 Go 标准库的一部分。 docker-compose
是一个单独的应用程序,作为 docker
的一部分。
1.声明您的模板。
您可以在 Go
代码中将模板声明为 const
,或者将其放在文件中。
const composeTemplate = `version: "3.7"
services:
whoami:
image: "containous/whoami"
environment:
- VALUE='{{.Name}}'
- NAME_{{.Name}}='NAME'
deploy:
labels:
- value={{.Name}}
- name_{{.Name}}=NAME
networks:
- {{.Name}}
`
2。为您的模板配置。
创建将填充并用于执行模板的配置类型。
type Config struct {
Name string
}
3。使用 config.
执行您的模板conf := &Config{Name: "MyService"}
tpl, err := template.New("myservice").Parse(composeTemplate)
if err != nil {
// Handle error.
}
var output bytes.Buffer
err = tpl.Execute(&output, conf)
if err != nil {
// Handle error.
}
4.将输出写入文件。
err = ioutil.WriteFile("myservice-compose.yml", output.Bytes(), 0644)
if err != nil {
// Handle error.
}
祝你好运!
我一直在搜索,显然 official Docker documentation 中实际上提供了信息,即使它没有明确引用 docker 撰写文件格式。
特别是:
You can use templates for some flags of service create, using the syntax provided by the Go’s text/template package.
The supported flags are the following :
--hostname --mount --env
由于未列出 --labels
,我们应该假设 text/template 不允许替换。
我很好奇“文档在哪里?”就此而言,是的,它几乎可以正常工作。 docker-compose
是另一个解析 yaml 文件以提供 docker 客户端接口以向 docker 守护程序发送命令的应用程序,或者至少这是我的理解,因为它看起来像 golang 模板通过通过并被替换。
这是一个使用示例 https://github.com/lovelysystems/rabbitmq-swarm-cluster/blob/master/docker-compose.yml
更多相关信息: https://github.com/moby/moby/issues/37377
我认为打开一个新案例是个好主意,但谁维护 docker.com 文档?