У меня есть файл docker-compose, который отлично работает, и скрипт test-containers.ps1, который запускает docker-compose. Все отлично работает локально.
version: '3.4'
services:
horizon.api.v1:
image: ${DOCKER_REGISTRY-}horizonapiv1
environment:
ASPNETCORE_ENVIRONMENT: Development
build:
context: .
dockerfile: api/horizon.api.v1/Dockerfile
Вот файл dockerfile, на который ссылаются файлы docker-compose и heroku.yml:
# horizon.api
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY api/horizon.api.v1/horizon.api.v1.csproj api/horizon.api.v1/
RUN dotnet restore api/horizon.api.v1/horizon.api.v1.csproj
COPY . .
WORKDIR /src/api/horizon.api.v1
RUN dotnet build horizon.api.v1.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish horizon.api.v1.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "horizon.api.v1.dll"]
Я хотел запустить это в Heroku, чтобы мои ученики могли видеть, как это работает, и чтобы студенты, у которых нет доступа к докеру, могли играть с приложением. Я сделал файл heroku.yml, который выглядит вроде должен работать... но это первый раз, когда я использую heroku, и, вероятно, я делаю что-то глупое.
build:
config:
ASPNETCORE_ENVIRONMENT: Development
docker:
api: ./api/horizon.api.v1/Dockerfile
Когда я пытаюсь отправить репозиторий на героку, я получаю следующую ошибку:
remote: Step 7/17 : COPY ["routing/horizon.routing/horizon.routing.csproj", "routing/horizon.routing/"]
remote: COPY failed: stat /var/lib/docker/tmp/docker-builder722311220/routing/horizon.routing/horizon.routing.csproj: no such file or directory
Я видел несколько сообщений в Интернете о том, что файл .dockerignore вызывает проблемы, поэтому я переименовал свой файл .dockerignore, чтобы убрать его из поля зрения, пока не выясню это.
Все пути должен верны, почему у docker-compose нет проблем с поиском необходимых путей на моем локальном компьютере, но heroku говорит, что их не существует? Что я делаю неправильно?


Я считаю, что это, вероятно, связано с контекстом сборки. Я предполагаю, что Heroku не использует контекст из корня проекта и использует каталог, в котором находится Dockerfile.
Отлично спасибо. Это избавило меня от моей проблемы... и к другой. :)