首页 > 解决方案 > Docker - docker-compose build 没有匹配的清单,但 docker build 在使用非默认 docker 上下文时有效

问题描述

使用非默认 docker 上下文时,我在构建 viadocker-compose build但不是 via时遇到问题。docker build难道我做错了什么?还是 docker-compose 不正确支持上下文......或者?

我在具有两个 docker 上下文的 mac 上运行,default上下文是指运行 linux 的标准 vm,而第二个上下文是 windows 服务器 virtualbox vm。(我也喜欢用剪刀跑步......)

我有一个DockerfileFROM 的 Windows 图像。 docker build .使用 windows 上下文时工作正常。我创建了一个docker-compose.yml文件,试图引用它Dockerfile来构建。 docker-compose build失败并出现错误“没有匹配的清单”。无论我处于哪种情况下,这都是正确的。

这是Dockerfile

FROM mcr.microsoft.com/dotnet/framework/samples:aspnetapp

在父目录中,docker-compose.yml文件:

version: '3.7'

services:

  web:
    build:
      context: ./web

docker build .以及 anddocker-compose builddocker versionand的输出docker context ls

11:52:42 ~/proj/k/docker/web (master) $ docker build .
Sending build context to Docker daemon  2.048kB
Step 1/1 : FROM mcr.microsoft.com/dotnet/framework/samples:aspnetapp
 ---> bd698e59f147
Successfully built bd698e59f147
11:52:45 ~/proj/k/docker/web (master) $ cd ..
11:56:38 ~/proj/k/docker (master) $ docker-compose build
Building web
Step 1/1 : FROM mcr.microsoft.com/dotnet/framework/samples:aspnetapp
aspnetapp: Pulling from dotnet/framework/samples
ERROR: Service 'web' failed to build: no matching manifest for linux/amd64 in the manifest list entries
11:56:43 ~/proj/k/docker (master) $ docker version
Client: Docker Engine - Community
 Version:           19.03.5
 API version:       1.40
 Go version:        go1.12.12
 Git commit:        633a0ea
 Built:             Wed Nov 13 07:22:34 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Enterprise
 Engine:
  Version:          19.03.5
  API version:      1.40 (minimum version 1.24)
  Go version:       go1.12.12
  Git commit:       2ee0c57608
  Built:            11/13/2019 07:58:51
  OS/Arch:          windows/amd64
  Experimental:     false
11:56:49 ~/proj/k/docker (master) $ docker context ls
NAME                DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT   ORCHESTRATOR
2019-box *          2019-box windows-docker-machine           tcp://192.168.99.90:2376                            
default             Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                         swarm
11:56:52 ~/proj/k/docker (master) $ 

标签: dockerdocker-compose

解决方案


我怀疑——但我不确定——docker-compose对“上下文”一无所知。这意味着您可以通过设置DOCKER_HOST环境变量(docker客户端也可以理解)来控制要使用的 Docker 实例。

与远程(网络连接)主机交谈:

export DOCKER_HOST=tcp://hostname:port

与 Unix 套接字通信:

export DOCKER_HOST=unix:///var/run/docker.sock

要让 docker 使用https而不是http,请设置DOCKER_TLS_VERIFY变量:

export DOCKER_TLS_VERIFY=1

有关这些变量的一些文档,请参阅“保护 Docker 守护程序套接字”。


推荐阅读