Docker compose docker compose文件中哪里允许使用Go模板?
标题是不言自明的:我找不到一个文档来描述在compose文件中允许使用Go模板的位置 换言之,我想知道以下哪项得到支持:Docker compose docker compose文件中哪里允许使用Go模板?,docker-compose,go-templates,Docker Compose,Go Templates,标题是不言自明的:我找不到一个文档来描述在compose文件中允许使用Go模板的位置 换言之,我想知道以下哪项得到支持: version: "3.7" services: whoami: image: "containous/whoami" environment: - VALUE='{{.Name}}' - NAME_{{.Name}}='NAME' deploy: labels: - value={{.Nam
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。声明您的模板。
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.
}
err = ioutil.WriteFile("myservice-compose.yml", output.Bytes(), 0644)
if err != nil {
// Handle error.
}
您可以在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。为您的模板进行配置。
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.
}
err = ioutil.WriteFile("myservice-compose.yml", output.Bytes(), 0644)
if err != nil {
// Handle error.
}
创建将填充并用于执行模板的配置类型
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.
}
err = ioutil.WriteFile("myservice-compose.yml", output.Bytes(), 0644)
if err != nil {
// Handle error.
}
4。将输出写入文件。
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.
}
err = ioutil.WriteFile("myservice-compose.yml", output.Bytes(), 0644)
if err != nil {
// Handle error.
}
祝你好运 我一直在搜索,显然信息实际上是在中提供的,即使它没有明确地引用docker compose文件格式 特别是: 您可以使用模板创建服务的某些标志,使用 Go的文本/模板包提供的语法 支持的标志如下所示: --主机名 --坐骑 --环境 由于
--标签未列出,我们应假定不允许在其中替换文本/模板。我很好奇关于这方面的“文档在哪里?”但是的,它几乎可以工作docker compose
是另一个解析yaml文件的应用程序,用于向docker客户端接口发送命令以发送到docker daemon,或者至少这是我所理解的,因为它看起来像是golang模板通过并被替换
下面是一个使用示例
有关这方面的更多信息:
我认为打开一个新案例是一个好主意,但谁维护docker.com文档?也许我的问题不清楚,但由于docker是用Golang编写的,可以使用Golang模板直接在docker中执行操作,例如,可以告诉docker使用评估过的go模板设置环境变量,类似于docker服务create--name rlogiaco--env service_name=“{{.service.name}}”alpine/bin/sh-c'echo服务是$service_name check'
。因此,我想问的是,与docker compose文件格式相关的那些模板在哪里被允许?在我的自我回答中,我报告说它确实适用于环境、装载和主机名,但我需要它在标签上,这是不受支持的。我还报告了这些文档的位置。这太好了,不可能是真的。我刚刚在docker compose.yml
文件中声明了hostname:“{{.Service.Name}}”
,以验证这一点docker compose exec cat/etc/hostname
刚刚生成了{{.Service.Name}
。所以,不,很遗憾,这不起作用,至少对--hostname
不起作用。我会尝试使用单引号而不是双引号…对它进行了快速测试,但也不起作用。很遗憾,它没有得到支持。