Daniel J.G.
Daniel J.G.

Reputation: 34992

Best practice for running a non trusted .net core application inside a docker container

Let's say I want to run inside a docker container some third party .net core application I don't fully trust.

Right now I have tried the following approach:

I was also considering the idea of having a predefined dockerfile with microsoft/dotnet as the base image. It will basically embed the application code, set it as the working dir and run the restore, build and run commands.

FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app

RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]

ENTRYPOINT ["dotnet", "run"]

I could then copy the predefined dockerfile into the temp folder, build a new image just for that particular application and finally run a new container using that image.

Is the dockerfile approach overkill for simple command line apps? What would be the best practice for running those untrusted applications? (which might be one I completely ignore)

EDIT

Since I will discard the container after it runs and the docker command will be generated by some application, I will probably stay with the first option of just mounting a volume.

I have also found this blog post where they built a similar sanbox environment and ended up following the same mounted volume approach

Upvotes: 2

Views: 493

Answers (1)

rudolfdobias
rudolfdobias

Reputation: 1948

As far I know, what happens in docker, stays in docker.

When you link a volume (-v) to the image, the process can alter the files in the folder you mounted. But only there. The process cannot follow any symlinks or step out of the mounted folder since it's forbidden for obvious security reasons.

When you don't link anything and copy the application code into the image, it's definitely isolated.

The tcp/udp ports exposition is up to you as well as memory/cpu consumption and you can even isolate the process from internet e.g. like that


Therefore, I don't think that using dockerfile is an overkill and I'd summarize it like this:

When you want to run it once, try it and forget it - use command line if you are ok with typing the nasty command. If you plan to use it more - create a Dockerfile. I don't see much space for declaring "best practice" here, considering it an question of personal preferences.

Upvotes: 2

Related Questions