Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use custom Visual Studio run configuration with Docker

I'm in the process of setting up a .NET Core project with Docker in Visual Studio 2017. I've created the project and added the docker-compose to the solution, and everything works.

But somehow, the VS won't build and run Docker with any configurations, other than Debug and Release.

I've created solution and project configurations named Preproduction and selected it, as well as created a docker-compose.vs.preproduction.yml file.

But when I run the preproduction configuration, the project runs as if Release was selected instead. The Build Output console also shows the following:

Debug

*docker-compose -f "docker-compose.yml" -f "docker-compose.override.yml" -f "docker-compose.vs.debug.yml" -p dockercompose3979710767*

Release

*docker-compose -f "docker-compose.yml" -f "docker-compose.override.yml" -f "docker-compose.vs.release.yml" -p dockercompose3979710767*

Preproduction

*docker-compose -f "docker-compose.yml" -f "docker-compose.override.yml" -f "docker-compose.vs.release.yml" -p dockercompose3979710767*

Notice the second yml file. Somehow it uses the release file, and not the custom configuration file I've added.

Does anyone have any idea how to solve this, so docker will use my custom configurations?

like image 897
Anders Avatar asked May 31 '17 08:05

Anders


2 Answers

Unfortunately it is not possible. After spending a lot of time to figure it out, it turned out that those two filenames are hardcoded into a DLL. Everything which is not 'DEBUG' will use the 'RELEASE' files.

Using different docker-compose.yml files by referencing them from different folder could be a solution, but since it is not a standard project but a Docker project, you don't have access to the post build events to copy the required files there. Furthermore you cannot have multiple Dockerfile, because it is also based on name convention.

You can use one version to develop and test, defined in the included files and create a script which builds everything manually based on your existing compose files and your extra.

like image 54
Andras Sebo Avatar answered Oct 19 '22 20:10

Andras Sebo


I provide some non-standard solution for this issue can be solved. Here we go: 1) Get dnSPY tool (https://github.com/0xd4d/dnSpy/releases)

2) Install it

3) Find file Microsoft.Docker.dll (For me it was in "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Sdks\Microsoft.Docker.Sdk\tools" way.)

4) Get copy of this file (copy in some directory for example).

5) Open this dll in dnSpy.exe

6)Go Microsoft.Docker (version number) -> Microsoft.Docker.dll -> DockerComposeClient class -> MergedDockerComposeDocumentProvider private class -> GetDocuments private method

7) In this method you can see all file pathes and files used for build

8) RightClick on necessary string -> Edit IL Instructions

9) Edit what you need (as for me I was able to change docker-compose.override.yml to docker-compose.development.yml)

10) Save change

11) File -> Save Module and saving your upgraded DLL.

WHOILA!!! Actually you must restart VS and maybe docker. After this your changes will be apply to pipeline build. Enjoy

like image 26
Yurimihnovec Avatar answered Oct 19 '22 19:10

Yurimihnovec