我正在尝试编写一个构建.NET Core 2.2控制台应用程序project-microservice-logger.csproj
的Dockerfile。我遇到一些构建错误,我相信这是因为我要构建的Dockerfile位于包含project-microservice-logger.csproj
但是该项目对位于不同目录中的项目有一些引用。
/company/project-common/project-common-database/project-common-database.csproj
/company/project-microservices/project-microservice-logger/project-microservice-logger.csproj
发出命令时,在/company/project-microservices/project-microservice-logger
目录中时,我收到类似
名称空间中不存在类型或名称空间名称'Common'
因为我可以很好地构建它,所以我知道它具有某些东西,这是由于Dockers构建上下文所致,并且找不到文件。
我的Docker文件没什么特别的,基本上只是从一些在线可用的.NET Core Docker模板中提取的。
FROM microsoft/dotnet:2.2-sdk AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# Build runtime image
FROM microsoft/dotnet:2.2-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "logging.dll"]
如果它对于将来的持续部署情况是一个更好的解决方案,则我愿意改变我们对项目引用的方式。
所有代码都在一个存储库中,但目前分为不同的解决方案(核心,微服务和Web)
版本
.NET Core 2.2
Docker for Mac /版本2.0.0.2
答案 0 :(得分:0)
我将publish
逻辑放入shell脚本中,并且docker映像使用从中构建的文件作为其代码库。
此脚本采用以下文件夹结构:
Solution-Folder / build / this-build-script.sh
解决方案文件夹/MyProject/MyProjectName.csproj
BUILD_MODE="Release"
DOCKER_IMAGE_TAG="latest"
readonly BUILD_MODE
readonly DOCKER_IMAGE_TAG
publish_and_build_image()
{
PROJECT_DIR=$1
PROJECT_FILE_NAME=$2
DOCKER_IMAGE_NAME=$3
echo "Publishing project $PROJECT_FILE_NAME ..."
echo
dotnet publish "..\\$PROJECT_DIR\\$PROJECT_FILE_NAME" --configuration $BUILD_MODE --verbosity quiet
echo "Building docker image $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG ..."
docker build --tag=$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG "../$PROJECT_DIR" --quiet
#echo
#echo -e "\033[32m $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG built \033[0m"
}
publish_and_build_image "MyProject" "MyProjectName.csproj" "my-docker-img-name"