Я строю простое приложение DotnetCore с поддержкой docker-compose с VS2017.

У меня есть два Dockerfile, один для приложения и один для прокси NGINX. Кроме того, существует файл docker-compose.yml, который объединяет оба эти элемента вместе.

Это Dockerfile для приложения aspnetcore, там много операторов COPY, и все они работают правильно!

FROM microsoft/dotnet:2.0-runtime AS base
WORKDIR /app

FROM microsoft/dotnet:2.0-sdk AS build
WORKDIR /src
COPY CoreServer.sln ./
COPY CoreServer/CoreServer.csproj CoreServer/
RUN dotnet restore -nowarn:msb3202,nu1503
COPY . .
WORKDIR /src/CoreServer
RUN dotnet build -c Release -o /app

FROM build AS publish
RUN dotnet publish -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "CoreServer.dll"]

Это Dockerfile nginx, который не может правильно копировать файлы. Вместо этого он выводит следующую ошибку:

Не удалось скопировать: stat /var/lib/docker/tmp/docker-builder780242597/nginx.conf: такого файла или каталога нет. # 1859

FROM nginx

WORKDIR /etc/nginx

COPY nginx.conf ./
COPY server.crt ./
COPY server.key ./

Я попытался собрать этот Dockerfile сам по себе, и он работает, но когда я использую docker-compose, он выдает ошибку выше.

Вот так выглядит файл docker-compose.yml

version: '3'

services:
  coreserver:
    image: coreserver
    build:
      context: .
      dockerfile: CoreServer/Dockerfile
    expose:
      - "5000"

  nginx:
    build: 
      context: .
      dockerfile: nginx/Dockerfile
    ports:
      - "80:80"
      - "443:443"
    links:
      - coreserver

Если вы хотите ознакомиться с полным проектом, то это тестовое приложение для веб-сокета dotnetcore с сервером и клиентским приложением.

https://github.com/avboivin/WssCoreServer/tree/master/server

Может кто-нибудь сказать мне, что я делаю неправильно, чтобы docker send выдал эту конкретную ошибку?

2 ответа2

2

С https://docs.docker.com/engine/reference/builder/#copy. говорит:

COPY подчиняется следующим правилам:

  • Путь [src] должен быть внутри контекста сборки; Вы не можете скопировать ../something / что-то, потому что первый шаг сборки docker - это отправить каталог контекста (и подкаталоги) демону docker.

  • Если [src] является каталогом, копируется все содержимое каталога, включая метаданные файловой системы.

так что это не ошибки. COPY не может читать файлы с вашего абсолютного пути.

поэтому решение состоит в том, чтобы создать ваш docker-compose.yml в том же каталоге, что и ваши SOURCE dir/files, и запустить его.

1

Казалось бы, это ошибка.

Я нашел решение здесь:

https://github.com/docker/for-mac/issues/1922#issuecomment-355364451

Который просто перемещал Dockerfile, у которого были проблемы на корневом уровне файла docker-compose.yaml.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .