Visual Studio Docker Compose项目Dockerfile不在项目目录时无法显示StartDebugging选项的问题
我最近碰到这么个头疼的问题:在用Visual Studio的Docker Compose项目(.dcproj)时,如果Dockerfile没放在项目文件夹里,而是在上几级目录,VS就不显示「StartDebugging」这个调试选项了。
先给大家看看我当时的文件结构:
root |- docker-compose.yml |- docker-compose.dcproj |-- DockerFiles\ | |- Dockerfile |-- TestForDocker\ | |- TestForDocker.sln | |-- TestForDocker\ | |- TestForDocker.csproj
这种结构下,我打开「Manage Docker Compose Launch Settings」的时候,界面里根本找不到「StartDebugging」的选项,完全没法启动调试。
一开始我试了个临时解决办法:把Dockerfile直接挪到.csproj所在的目录,然后修改docker-compose.yml里的Dockerfile路径,这时候再看,「StartDebugging」选项就正常显示出来了。但总挪文件也不是长久之计,毕竟团队的目录结构是固定的,后来我找到了不用移动文件的解决方式,分享给大家:
解决步骤
调整docker-compose.yml的build配置
一定要在build节点里同时指定context和dockerfile的路径,比如我这里的配置:services: testfordocker: build: context: . # 这里指向root目录,要确保这个路径能同时覆盖到Dockerfile和项目代码 dockerfile: DockerFiles/Dockerfile # 其他服务配置...这里的
context很重要,VS需要通过它找到项目的.csproj文件来关联调试,所以不能只指向Dockerfile所在的文件夹,得包含项目代码的目录。在项目的.csproj文件里添加Docker配置
打开TestForDocker.csproj,在PropertyGroup里加上这两行配置,告诉VS Dockerfile的位置:<PropertyGroup> <!-- 相对项目目录,指向root目录的路径 --> <DockerfileContext>../../</DockerfileContext> <!-- 相对项目目录,指向Dockerfile的路径 --> <Dockerfile>../DockerFiles/Dockerfile</Dockerfile> </PropertyGroup>这里的相对路径要根据你的实际目录结构来调整,确保能正确指向对应的文件夹和文件。
重新加载项目
保存所有修改后,右键解决方案选择「重新加载项目」,或者干脆重启一下VS,再打开「Manage Docker Compose Launch Settings」,就能看到「StartDebugging」选项正常显示了。
原理说明
其实VS的Docker Compose调试功能需要把项目文件和Dockerfile关联起来,默认情况下它只会在项目目录下找Dockerfile,如果你的Dockerfile在其他位置,VS没法自动识别这种关联,所以就不会显示调试选项。通过手动指定context和项目里的Docker配置,就能让VS正确找到两者的关联,调试选项也就回来了。
备注:内容来源于stack exchange,提问作者Stormenet

