Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker swarm:';构建';堆栈部署期间忽略docker compose文件中的配置_Docker_Docker Compose_Dockerfile_Docker Swarm - Fatal编程技术网

Docker swarm:';构建';堆栈部署期间忽略docker compose文件中的配置

Docker swarm:';构建';堆栈部署期间忽略docker compose文件中的配置,docker,docker-compose,dockerfile,docker-swarm,Docker,Docker Compose,Dockerfile,Docker Swarm,我们已经创建了一个包含多个服务的docker compose文件。这些服务的映像是在运行时使用“build”配置选项生成的。相应的Dockerfile在相应的目录中给出 示例docker编写文件 version: '3' services: db2server: build: ./db2server ports: - "50005:50000" command: ["db2start"] appruntime: build: ./apprunt

我们已经创建了一个包含多个服务的docker compose文件。这些服务的映像是在运行时使用“build”配置选项生成的。相应的Dockerfile在相应的目录中给出

示例docker编写文件

version: '3'
services:
  db2server:
    build: ./db2server
    ports:
      - "50005:50000"
    command: ["db2start"]
  appruntime:
    build: ./appruntime
    depends_on:
     - db2server
此docker compose文件使用
docker compose
命令

  • 映像是在运行时从
    db2server
    appruntime
    目录中的Dockerfile构建的
  • 这些映像将部署在主机中
但是,当我们试图在docker swarm中部署它时,会抛出以下错误

docker堆栈部署-c/home/docker/docker-compose.yml应用程序

在docker swarm中的堆栈部署过程中,似乎忽略了“构建”配置选项


我们如何在docker swarm中部署docker compose文件中定义的这些服务(使用构建选项)。

简而言之,您不能将
build
命令用于
docker stack deploy

从:

注意:在swarm模式下使用(版本3)Compose文件部署堆栈时,忽略
docker stack
命令
build
选项。
docker stack
命令只接受预构建的图像

另一种方法是在部署swarm集群之前构建docker映像


使用命令创建docker图像;将创建的映像推送到(公共或私有)
docker注册表
;并在您的
docker compose
文件中引用它。

compose文件提供两种工具:
docker compose
cli和
docker stack
cli。“构建”选项在
docker compose
中工作,但被堆栈命令忽略,“部署”选项在堆栈命令中工作,但被
docker compose
忽略

Swarm不是为你打造形象而设计的。它假定您的图像在图像注册表中可用。群中的多个节点无法彼此共享图像,因此注册表(远程或在群上运行)是确保它们都可以提取相同的精确图像的唯一方法


因此,典型的例子是让Docker Hub根据代码提交自动构建映像,或者让CI/CD平台构建映像并推送到注册表。然后,您的
stack deploy
命令将从该注册表中提取正确的映像。

如果有人仍在该注册表中,您可以通过设置image参数和build参数在compose中标记内置映像,如您在。因此,该文件应该如下所示:

version: '3'
services:
  db2server:
    image: <your registry here>/db2server
    build: ./db2server
    ports:
      - "50005:50000"
    command: ["db2start"]
  appruntime:
    image: <your registry here>/appruntime
    build: ./appruntime
    depends_on:
     - db2server

我发现构建、推送图像对于较小的开发修改非常耗时,是否有更省时的替代方案?您可以使用设置开发节点,您可以将堆栈限制为仅在该节点中运行,这样,如果您在同一节点上构建映像,就不必推送映像。如果
docker stack
支持诸如
--build
之类的标志,这将非常好,这些标志仅在使用例如
--orchestrator none
--orchestrator singlenode
时可用
version: '3'
services:
  db2server:
    image: <your registry here>/db2server
    build: ./db2server
    ports:
      - "50005:50000"
    command: ["db2start"]
  appruntime:
    image: <your registry here>/appruntime
    build: ./appruntime
    depends_on:
     - db2server
docker-compose build
docker-compose push
docker stack deploy -c /home/docker/docker-compose.yml app