Docker compose docker 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

标题是不言自明的:我找不到一个文档来描述在compose文件中允许使用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。声明您的模板。

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
不起作用。我会尝试使用单引号而不是双引号…对它进行了快速测试,但也不起作用。很遗憾,它没有得到支持。