Search code examples
windowspowershelldockerclickhouse

Data directory permissions on host for Clickhouse installation via docker on Windows


I have a similar issue to the following link, but in powershell as I am running a clickhouse docker container in windows 10.

Data directory permissions on host for Clickhouse installation via docker

My setup is run as such:

docker run -d -p 8124:8124 --name my_database --ulimit nofile=262144:262144 --volume=E:/:/var/lib/clickhouse yandex/clickhouse-server

E drive is one of the drives on my windows computer.

I cannot seem to access /var/lib/clickhouse/data when running a mergetree table creation. It seems that clickhouse client is not being given adequate permissions to reach this file system. The error looks as such:

Access to file denied: /var/lib/clickhouse/data/default/test_mergetree/tmp_insert_20150731_20150731_8_8_0

Since I am in powershell I am unsure how I might approach solving this. I am attempting to access the file system to give powershell permissions:

Something like this

ICACLS "var/lib/clickhouse/data" /setowner "administrator"

But then since clickhouse is dockerized it seems I cannot find the path:

The system cannot find the path specified.

Would I have to run docker compose? Or am I approaching this the wrong way?

ATTEMPT 1

I've tried running the following:

docker run --rm -i --entrypoint /bin/sh yandex/clickhouse-server -c id clickhouse

#got back:
uid=0(root) gid=0(root) groups=0(root)

#went into the system and ran
docker exec -it container-id bash 
chown -R 0:0 /var/lib/clickhouse

#got back
chown: cannot read directory '/var/lib/clickhouse/System Volume Information': Permission denied

Solution

  • Turns out this is an issue which has not been repaired in windows docker desktop:

    https://github.com/docker/for-win/issues/39

    Volume mounts are necesarry. But I got around it by changing the disk image to the target host drive. Under settings -> advanced -> change the virtual hard disk image to the drive you want and you can write within that drive. Note you still won't have access to raw data.