11

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

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

我需要为容器设置一个静态名称,因为它由mycustomimageforservice2使用

使用(版本 3)Compose 文件以 swarm 模式部署堆栈时,将忽略container_name 选项。

我必须使用版本: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:

我有哪些选择?

4

5 回答 5

7

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

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

于 2017-09-29T08:51:37.230 回答
1

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

container_name: my-web-container

在完整的 docker-compose 文件中看到这个

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

了解更多

于 2021-11-30T11:29:26.830 回答
1

您可以在 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 中使用 links 参数,您将允许某些服务使用容器名称访问另一个服务,在这种情况下,service2 将通过 links 参数建立到 service1 的连接。我不确定您为什么使用网络,但不需要使用 links 参数。

于 2018-05-07T03:40:37.527 回答
1

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

于 2020-05-19T03:10:33.317 回答
0

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

于 2019-02-18T07:23:39.773 回答