【问题标题】:Docker compose/swarm 3: docker file path , build, container name, links, migrationDocker compose/swarm 3:docker 文件路径、构建、容器名称、链接、迁移
【发布时间】:2018-04-12 06:26:49
【问题描述】:

我有一个带有 docker-compose 文件的项目并想迁移到 V3,但是在部署时使用

docker stack deploy --compose-file=docker-compose.yml vertx

它不理解构建路径、链接、容器名称...

我的文件位于此处 https://github.com/armdev/vertx-spring/blob/master/docker-compose.yml

version: '3'
services:
  eureka-node:
    image: eureka-node
    build: ./eureka-node
    container_name: eureka-node
    ports:
      - '8761:8761'
    networks:
      - vertx-network
  postgres-node:
    image: postgres-node
    build: ./postgres-node
    container_name: postgres-node
    ports:
      - '5432:5432'
    networks:
      - vertx-network
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: socnet
      POSTGRES_DB: socnet
  vertx-node:
    image: vertx-node
    build: ./vertx-node
    container_name: vertx-node
    links:
      - postgres-node
      - eureka-node
    ports:
      - '8585:8585'
    networks:
      - vertx-network
networks:
  vertx-network:
    driver: overlay

当我运行 docker-compose up 时,它正在工作,但使用 堆栈部署不。

如何定义docker文件的路径?

【问题讨论】:

    标签: docker docker-compose dockerfile docker-swarm


    【解决方案1】:

    docker stack deploy 仅适用于镜像,不适用于构建。

    这意味着您必须将图像推送到图像注册表(使用构建过程创建),稍后docker stack deploy 将下载图像并执行它们。

    here 你有一个例子说明它是如何为一个 php 应用程序完成的。 您必须注意第 1、3 和 4 部分。 这些文章是关于 php 的,但可以很容易地应用于任何其他语言。

    【讨论】:

      【解决方案2】:

      swarm 模式的“docker service”接口在管理容器方面有一些根本的不同。您不再像“docker run”那样直接运行容器,并且假设您将更频繁地在分布式环境中执行此操作。

      我将根据您列出的这些具体内容来分解答案。

      它不理解构建路径、链接、容器名称...

      链接

      链接选项已经被弃用了一段时间,取而代之的是与“docker network”功能一起引入的网络服务发现功能。您不再需要指定与容器之间的特定链接。相反,您只需要确保所有容器都在同一个网络上,然后它们就可以通过容器名称或“网络别名”发现彼此

      docker-compose 默认会将你所有的容器放到同一个网络中,并将 compose 服务名称设置为别名。这意味着如果您有一个名为“postgres-node”的服务,您可以通过名为“postgres-node”的 dns 访问它。

      容器名称

      “docker service”接口允许您声明所需的状态。 “我想要 x 个相同的服务”。由于接口必须支持 x 个服务实例,它不允许您选择特定的容器名称。相反,您可以选择服务名称。在 'docker stack deploy' 的情况下,将使用在 docker-compose.yml 文件中的 services 键下定义的服务名称,但它也会将堆栈名称添加到服务名称之前。

      在大多数情况下,我认为在 docker-compose.yml 文件中覆盖容器名称是不必要的,即使通过 docker-compose up 使用常规容器也是如此。

      如果您出于网络服务发现的目的需要不同的名称,请添加不同的别名或使用您在使用docker-composedocker stack deploy 时获得的服务名称别名。

      构建路径

      因为 swarm 模式被构建为分布式系统,所以在本地构建映像并不是“docker stack deploy”的本意。相反,您应该构建映像并将其推送到集群中所有节点都可以访问的注册表。

      如果您使用的是单节点集群“集群”,您应该能够使用docker-compose build 选项来获取本地构建的图像,然后使用docker stack deploy

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-11
        • 2018-06-15
        • 2020-08-06
        • 1970-01-01
        • 1970-01-01
        • 2019-04-14
        • 2019-04-22
        相关资源
        最近更新 更多