Docker - нет соответствующего манифеста для docker -композитной сборки, но docker сборка работает при использовании нестандартного контекста docker - PullRequest
0 голосов
/ 25 января 2020

У меня проблема с использованием docker-compose build, но не через docker build при использовании нестандартного контекста docker. Я делаю что-то неправильно? Или docker -compose не поддерживает контексты должным образом ... или?

Я работаю на ма c с двумя docker контекстами, default контекст относится к стандартному vm, работающему linux в то время как второй контекст - windows server virtualbox vm. (Я тоже люблю бегать с ножницами ...)

У меня есть Dockerfile, с которого 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 . и docker-compose build и docker version и 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) $ 

1 Ответ

0 голосов
/ 25 января 2020

Я подозреваю - но я не уверен - docker-compose ничего не знает о "контекстах". Это означает, что вы можете контролировать, какой экземпляр Docker использовать, установив переменную окружения DOCKER_HOST (что также понимается клиентом 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 сокета демона " для некоторой документации по этим переменным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...