docker - Docker - docker-compose build 没有匹配的清单,但 docker build 在使用非默认 docker 上下文时有效
问题描述
使用非默认 docker 上下文时,我在构建 viadocker-compose build
但不是 via时遇到问题。docker build
难道我做错了什么?还是 docker-compose 不正确支持上下文......或者?
我在具有两个 docker 上下文的 mac 上运行,default
上下文是指运行 linux 的标准 vm,而第二个上下文是 windows 服务器 virtualbox vm。(我也喜欢用剪刀跑步......)
我有一个Dockerfile
FROM 的 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 build
和docker version
and的输出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) $
解决方案
我怀疑——但我不确定——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 守护程序套接字”。
推荐阅读
- algorithm - 使用 WHILE 循环时如何递归调用函数并正确中断它?
- sonarqube - SonarQube 社区 cxx 插件忽略的 Clang 静态分析器报告
- php - 在自定义主题中添加用户列表下拉列表
- c++ - 警告 C4101 未引用的局部变量
- c# - Entity Framework Core 中的 FreeText
- jquery - 在 AMP html 中使用 JQuery 时出现错误如何解决?
- mysql - Mysql NOT IS NULL 行为
- ios - 当设备处于 IOS 13 的暗模式时如何将您的应用程序限制为亮模式
- javascript - React-Native 中的树视图
- python-3.x - 尝试从单个函数获取两个列表时出现 ValueError