Docker 为堆栈编写集合容器名称

Docker compose set container name for stacks

我正在将一个小堆栈部署到 UCP

我面临的一个问题是为 service1 命名容器。

我需要容器的静态名称,因为它被 mycustomimageforservice2

使用

当使用(版本 3)Compose 文件以群模式部署堆栈时,container_name option被忽略。

我必须使用 版本: 3 撰写文件。

version: "3"
services:

  service1:
    image: dockerhub/service1
    ports: 
      - "8080:8080"
    container_name: service1container
    networks:
      - mynet

  service2:
    image: myrepo/mycustomimageforservice2
    networks:
      - mynet
    restart: on-failure

networks:
  mynet:

我有哪些选择?

您不能在 compose 中强制使用 containerName,因为它旨在允许扩展服务(通过更新副本数量)之类的事情,而这不适用于名称。 一项服务可以使用服务名称 (http://serviceName:internalServicePort) 访问另一项服务,而 docker 将为您完成其余的工作(例如解析为实际容器地址、副本之间的负载平衡....)。

这适用于覆盖的默认网络类型

您可能会在 docker-compose.yml 文件中遇到链接服务的问题。 类似于:

version: "3"
services:

  service1:
    image: dockerhub/service1
    ports: 
      - "8080:8080"
    networks:
      - mynet

  service2:
    image: myrepo/mycustomimageforservice2
    networks:
      - mynet
    restart: on-failure
    links:
      - service1

networks:
  mynet:

在 docker-compose.yml 中使用链接参数,您将允许某些服务使用容器名称访问另一个服务,在这种情况下,service2 将通过链接参数建立到 service1 的连接.我不确定您为什么要使用网络,但不需要使用链接参数。

如果您确实必须使用版本 3 但不使用 swarm,则可以将 --compatibility 添加到您的命令中。

container_name 选项在 swarm 模式下部署堆栈时被忽略,因为容器名称需要是唯一的。 https://docs.docker.com/compose/compose-file/#container_name

指定自定义容器名称,而不是生成的默认名称。

container_name: my-web-container

查看完整的 docker-撰写文件

version: '3.9'
services:
  
  node-ecom:
    build: .
    image: "node-ecom-image:1.0.0"
    container_name: my-web-container
    ports:
      - "4000:3000"
    volumes:
      - ./:/app:ro
      - /app/node_modules
      - /config/.env
    env_file:
      - ./config/.env

know more