Search code examples
.netdocker.net-coredockerfilealpine-linux

How to copy contents of folder to /app via dockerfile?


We have a solution-wide folder that contains shared settings that each project needs.

I'm trying to copy the contents of that folder to the /app folder but it's not working

This is part of my dockerfile configuration:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-alpine3.12 AS build

### this is where I'm trying to copy the contents of Shared Settings to /app
WORKDIR '/src/Shared Settings'
COPY '/src/Shared Settings' /app

### this is part of the rest of the docker file, which works fine
WORKDIR /src
COPY . .
WORKDIR /src/OurProject.Server
RUN dotnet restore OurProject.Server.csproj
RUN dotnet build OurProject.Server.csproj -c Release -o /app

What do I need to change to get the contents of Shared Settings copied to the /app folder in my docker container?


Solution

  • The Dockerfile documentation for the COPY directive notes that it has two forms, a space-separated form and a JSON-array form, and it notes

    This latter [JSON array] form is required for paths containing whitespace.

    So applying that to your specific path, you would get

    COPY ["src/Shared Settings", "/app"]
    

    This is broadly true in a Dockerfile in general: the only quoting in native Dockerfile syntax is to write things in a JSON array. Wrapping a WORKDIR or a COPY command in single quotes isn't documented as having an effect. A string-form RUN or CMD is an apparent exception to this, but only because these commands are run via a shell and there the shell's quoting rules apply.