docker - 如何在 docker-compose 中为集群部署设置 container_name?

我用 docker stack deploy -c docker-compose.yml my-service 部署我的 docker 容器

问题:docker service ls 总是显示 NAMEmy-service_my-service,从 docker-compose 生成:

services:
  my-service:
    #container_name #not supported when using 'docker stack deploy'
    ports:
      - "8090:8080"
    ...

这是因为 docker stack deploy 中的名字被当作堆栈名,而服务形式 docker-compose 作为服务名。

因此,结果名称是 stackname_servicename

问题:如何强制在没有堆栈前缀的情况下命名服务?

回答1

此行为是技术先决条件,因此无法更改。您可以更改堆栈名称和服务名称,但不能更改两者的组成。该名称必须是单独的,否则您可能在不同的网络中具有相同名称的不同服务,因此 ID 和别名相同。

您可以通过使用 docker service create --name 创建一个 bash 脚本来构建自己的“撰写”以实现该目标,然后由您自己负责。

回答2

由于无法解决这个问题,也许最好只为应用程序提供一个通用服务名称,例如 app:

services:
  app:
    ports:
      - "8090:8080"
    ...

这样,docker stack deploy my-service 将导致 my-service_app。哪个读起来更好。