我正在尝试像hostname: '{{.Node.Hostname}}'
在 AWS EC2 中的 docker compose v3 中一样设置容器的主机名。
它失败了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吗?谢谢。
这现在适用于 Docker 的 compose 文件和 v17.12(2017 年 12 月稳定版),但仅适用于 Swarm Stacks。
我认为您正在使用 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-compose 这就是我得到的:
docker-compose up -d
docker-compose exec nginx hostname
{{.Node.Hostname}}
然后,如果我在 Swarm Stacks 中使用该文件:
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
将替换撰写文件中的变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句