Docker Compose Up执行失败提示项目未找到,但Visual Studio可正常运行
docker compose up时项目依赖找不到的问题 问题根源
Visual Studio启动Docker Compose时,会自动以解决方案根目录作为构建上下文执行命令,而手动运行docker compose up时,若你所在的目录不是项目根,或者Docker Compose配置里的上下文路径不对,就会导致Dockerfile无法找到依赖的子项目(比如ExternalDataProvider)。
具体解决步骤
切换到正确的目录执行命令
找到你的docker-compose.yml所在的解决方案根目录(比如名为DockerTestSolution的文件夹),在终端里切换到该目录后,再执行:docker compose up不要在
DockerTestApi这类子项目目录下执行命令。检查Dockerfile的COPY指令
确保Dockerfile里复制了所有依赖项目的csproj文件,而不只是主项目:# 复制主项目文件 COPY ["DockerTestApi/DockerTestApi.csproj", "DockerTestApi/"] # 复制依赖的外部项目文件 COPY ["ExternalDataProvider/ExternalDataProvider.csproj", "ExternalDataProvider/"] # 然后执行restore RUN dotnet restore "DockerTestApi/DockerTestApi.csproj"如果只复制了主项目的文件,restore时就会找不到依赖项目的路径。
确认Docker Compose里的构建上下文配置
打开docker-compose.yml,检查服务的build节点,确保context指向解决方案根目录(即docker-compose.yml所在的目录):services: dockertestapi: build: context: . # 这里的.代表当前目录,也就是解决方案根 dockerfile: DockerTestApi/Dockerfile如果
context被设置成了DockerTestApi/这类子目录,Docker构建时只能访问该子目录下的文件,自然找不到上级的ExternalDataProvider。手动验证构建上下文
在解决方案根目录执行以下命令,单独测试Docker构建是否正常:docker build -f DockerTestApi/Dockerfile .如果这个命令成功,说明
docker compose up的问题就是执行目录不对;如果仍然报错,再检查Dockerfile里的路径是否正确。
内容的提问来源于stack exchange,提问作者Mufas

