Я создал том докера с:
docker volume create my-volume-name
В моем консольном приложении, запущенном в Docker-контейнере, я использую конфигурацию создания, подобную этой:
{
"HostConfig": {
"Binds": [
"my-volume-name:/app/my-volume-name:rw"
],
"Privileged": true
}
}
Контейнер видит том, но не имеет никаких прав для записи в него.
Это дает мне ошибку «Отказано в разрешении». (за исключением того, что я пытаюсь создать файл в томе).
//create a file
try{
string path = Path.Combine(Directory.GetCurrentDirectory(), "my-volume-name","example.txt");
Console.WriteLine($"PATH {path}");
if (!File.Exists(path)){
File.Create(path);
TextWriter tw = new StreamWriter(path);
tw.WriteLine($"{DateTime.Now.ToString()}The very first line!");
tw.Close();
}else if (File.Exists(path)){
using(var tw = new StreamWriter(path, true)){tw.WriteLine($"{DateTime.Now.ToString()}The next line!");}
}
}catch(Exception e){Console.WriteLine($"ERROR:{e.ToString()}");}
Вот что я получаю:
Access to the path '/app/my-volume-name/example.txt' is denied. ---> System.IO.IOException: Permission denied
Чего мне не хватает для возможности записи на том, который я создал с помощью команды docker volume create
? Цель здесь - создать общий хост на хосте, который определенные контейнеры, которые я создал, могут читать и записывать в него.
edit (добавлен dockerfile):
FROM microsoft/dotnet:2.0-runtime-stretch AS base
RUN apt-get update && \
apt-get install -y --no-install-recommends unzip procps && \
rm -rf /var/lib/apt/lists/*
RUN useradd -ms /bin/bash moduleuser
USER moduleuser
RUN curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l ~/vsdbg
FROM microsoft/dotnet:2.0-sdk AS build-env
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Debug -o out
FROM base
WORKDIR /app
COPY --from=build-env /app/out ./
#moving down because CI/CD builds in VSTS didnt like two copies next to each other.
ENTRYPOINT ["dotnet", "ResourceModule.dll"]
Когда я ls -l
в контейнере, я вижу это:
drwxr-xr-x 3 root root 4096 Jul 2 13:28 my-volume-name
изменить 2:
Когда я удаляю создание moduleuser в dockerfile, я получаю эту ошибку:
ERROR:System.IO.IOException: The process cannot access the file '/app/my-volume-name/example.txt' because it is being used by another process.
Но он был создан - похоже, я на правильном пути.