不接受 docker 撰写文件 v3 中的主机名



我正在尝试将容器的主机名设置为在 AWS EC2 中的 docker compose v3 中hostname: '{{.Node.Hostname}}'

它失败了,因为Error response from daemon: rpc error: code = 3 desc = expanding hostname failed: template: expansion:1:7: executing "expansion" at <.Node.Hostname>: can't evaluate field Hostname in type struct { ID string }.

以下是版本详细信息,

Client:
 Version:      17.06.2-ce
 API version:  1.30
 Go version:   go1.8.4
 Git commit:   3dfb8343b139d6342acfd9975d7f1068b5b1c3d3
 Built:        Fri Nov 10 00:50:37 2017
 OS/Arch:      linux/amd64
Server:
 Version:      17.06.2-ce
 API version:  1.30 (minimum version 1.12)
 Go version:   go1.8.4
 Git commit:   402dd4a/17.06.2-ce
 Built:        Fri Nov 10 00:51:08 2017
 OS/Arch:      linux/amd64
 Experimental: false

根据 https://docs.docker.com/compose/compose-file/,17.06.+ 与 docker-compose v3 兼容。

我怎样才能使这个模板工作?我需要升级码头工人吗?谢谢。

这现在适用于 Docker 的撰写文件和 v17.12(2017 年 12 月稳定版(,但仅适用于与 Swarm Stack 一起使用时。

我认为您正在使用 Swarm,所以只需更新您的 docker 版本,您应该很好,但这里有更多信息供其他人使用,以防他们只是尝试单节点docker-compose up,这不适用于模板。

docker-compose不像 Swarm 那样解释 go 模板。

此外,.Node.Hostname是特定于 Swarm 的标签,因此您不能将其与单个服务器上的 docker-compose up 一起使用,该服务器上无权访问该标签。

只是为了验证,当我使用此撰写文件时:

version: "3.4"
services:
  nginx:
    image: nginx
    hostname: '{{.Node.Hostname}}'

在 docker 撰写中,这就是我得到的:

docker-compose up -d
docker-compose exec nginx hostname
{{.Node.Hostname}}

然后,如果我在 Swarm Stack 中使用该文件:

docker stack deploy -c docker-compose.yml hn
# find the node and container ID of that service task
# found them on node 1 with hostname "swarm1"
docker exec 0a087 hostname
swarm1

如果需要在单个节点中使用 docker-compose 并将主机名放入撰写文件中,可以使用变量替换,然后将主机名设置为变量,然后docker-compose up将替换撰写文件中的变量。

最新更新