Docker composing不适用于多个项目

Docker composing不适用于多个项目,docker,docker-compose,Docker,Docker Compose,我的文件夹结构如下所示: [Services] | +--[IdentityService] (this folder contains Docker & docker-compose file) | +--[ProductService] (this folder contains Docker & docker-compose file) | +--[ApiGateway] (this folder contains Docker & docker-compose file) | +--

我的文件夹结构如下所示:

[Services] | +--[IdentityService] (this folder contains Docker & docker-compose file) | +--[ProductService] (this folder contains Docker & docker-compose file) | +--[ApiGateway] (this folder contains Docker & docker-compose file) | +--docker-compose.yml
version: "3"
services:
  api_gateway:
    image: cog/mfp_api_gateway
    build:
      context: .
      dockerfile: Services/ApiGateway/ApiGateway/Dockerfile
    ports:
      - "8082:9000"
    depends_on:
      - identity_service
      - product_service

  identity_service:
    image: cog/mfp_identity_service
    build:
      context: .
      dockerfile: Services/IdentityService/Dockerfile
    ports:
      - "8080:9001"
    depends_on:
      - db

  product_service:
    image: cog/mfp_product_service
    build:
      context: .
      dockerfile: Services/ProductService/Dockerfile
    ports:
      - "8081:9002"
    depends_on:
      - db

  db:
    image: "mcr.microsoft.com/mssql/server:2017-latest"
    environment:
        SA_PASSWORD: "MYPASSWORD"
        ACCEPT_EULA: "Y"
    ports:
      - "1433:1433"
    volumes:
      - ./.db:/var/opt/mssql/
      - /var/opt/mssql/data
2]标识服务-Dockerfile

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 9000
ENV ASPNETCORE_URLS=http://+:9000

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY ["APIGateway.csproj", "./"]
RUN dotnet restore "./APIGateway.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "APIGateway.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "APIGateway.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
#ENTRYPOINT ["dotnet", "APIGateway.dll"]
ENTRYPOINT ["dotnet", "APIGateway.dll", "--server.urls", "http://0.0.0.0:9000"]
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 9001
ENV ASPNETCORE_URLS=http://+:9001

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["WebApi.csproj", "./"]
RUN dotnet restore "./WebApi.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "WebApi.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "WebApi.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
#ENTRYPOINT ["dotnet", "WebApi.dll"]
ENTRYPOINT ["dotnet", "WebApi.dll", "--server.urls", "http://0.0.0.0:9001"]
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 9002
ENV ASPNETCORE_URLS=http://+:9002

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["Product.API.csproj", "./"]
RUN dotnet restore "./Product.API.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "Product.API.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "Product.API.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
#ENTRYPOINT ["dotnet", "Product.API.dll"]
ENTRYPOINT ["dotnet", "Product.API.dll", "--server.urls", "http://0.0.0.0:9002"]
3]产品服务-Dockerfile

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 9000
ENV ASPNETCORE_URLS=http://+:9000

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY ["APIGateway.csproj", "./"]
RUN dotnet restore "./APIGateway.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "APIGateway.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "APIGateway.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
#ENTRYPOINT ["dotnet", "APIGateway.dll"]
ENTRYPOINT ["dotnet", "APIGateway.dll", "--server.urls", "http://0.0.0.0:9000"]
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 9001
ENV ASPNETCORE_URLS=http://+:9001

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["WebApi.csproj", "./"]
RUN dotnet restore "./WebApi.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "WebApi.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "WebApi.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
#ENTRYPOINT ["dotnet", "WebApi.dll"]
ENTRYPOINT ["dotnet", "WebApi.dll", "--server.urls", "http://0.0.0.0:9001"]
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 9002
ENV ASPNETCORE_URLS=http://+:9002

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["Product.API.csproj", "./"]
RUN dotnet restore "./Product.API.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "Product.API.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "Product.API.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
#ENTRYPOINT ["dotnet", "Product.API.dll"]
ENTRYPOINT ["dotnet", "Product.API.dll", "--server.urls", "http://0.0.0.0:9002"]
我的docker compose.yml如下所示:


在这里,当我单独运行docker文件时,所有文件都正常生成和运行。但是,当我可以运行outerdocker compose.yml时,我得到了与路径相关的错误。我需要在docker compose.yml文件中指定相对路径吗?

docker命令在docker文件中(更具体地说是
COPY
)是相对于当前docker上下文的

当您单独构建映像时,我猜您从每个
服务
目录运行
docker build
,这意味着上下文就是该特定目录

当您通过docker compose构建它们时,您明确地说上下文是
,这意味着
docker compose.yml
所在的目录


只要更改生成的上下文,您就会得到预期的结果=>
context:./Services/
。您可以在使用默认名称时删除
dockerfile
声明。

为什么同时指定生成和映像?它可能不知道要使用哪个。是的,docker-compose.yml路径是相对的(除非以斜杠开头),但看起来您已经将它们正确地写为relativeal,因此应该停止将上下文指定为”。“@Shardj你的意思是,分别构建它们,并在yaml中使用这些映像,而不是使用build命令?我只使用docker compose build,我不会指定映像,因为你只会混淆docker compose,因为它不知道是查找生成的映像还是指定的映像。@Shardj请帮助我重写外部yaml文件。”