搬运工-compose.yml
version: "3"
services:
mycentos:
image: mycentos
container_name: '{{.Node.Hostname}}-rh7'
hostname: '{{.Node.Hostname}}-rh7'
env_file:
- docker_run.env
privileged: true
cap_add:
- SYS_PTRACE
- SYS_ADMIN
networks:
- testnet
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: on-failure
networks:
testnet:
运行docker-compose会给我这个错误:
ERROR: for mycentos-rh7 Cannot create container for service mycentos-rh7: Invalid container name ({{.Node.Hostname}}-rh7), only [a-zA-Z0-9][a-zA-Z0-9_.-] are allowed
PS我可以通过" docker stack deploy"运行上面的compose文件而不会出错。所以问题似乎已经本地化为docker-compose
想要使用docker-compose而不是docker stack deploy的原因是测试容器更容易,因为它们留在localhost并且我可以获取contianer id来执行
答案 0 :(得分:0)
docker-compose variable substitution功能不是很强大,在您的上下文中没有类似{{.Node.Hostname}}
的内容,但您可以覆盖其他文件中的值:
<强>搬运工-compose.override.yaml 强>
version: "3"
services:
mycentos:
container_name: '${HOSTNAME}-rh7'
hostname: '${HOSTNAME}-rh7'
需要在启动期间设置环境变量HOSTNAME
:
HOSTNAME=$(hostname) docker-compose -f docker-compose.yaml -f docker-compose.override.yaml up -d
这适用于您的用例。
答案 1 :(得分:0)
container_name
不支持使用模板。来自official文档:
您可以使用模板为某些服务标志创建,使用 Go的文本/模板包提供的语法。支持的标志 如下:
- 主机名
- 安装
- ENV
PS我可以通过“docker stack”运行上面的compose文件而不会出错 部署“所以问题似乎已本地化为docker-compose
这是因为container_name
指令是ignored in that case:
注意:在群集模式下部署堆栈时,将忽略此选项 a(版本3)撰写文件。