alekzonder / docker-puppeteer

docker image with Google Puppeteer installed
https://hub.docker.com/r/alekzonder/puppeteer/
MIT License
485 stars 138 forks source link

Bind volumes don't work #38

Open whamtet opened 5 years ago

whamtet commented 5 years ago

Thanks for the excellent work Alek,

Your Dockerfile changes the user from root which breaks bind volumes on docker for linux. The use case is that I output a pdf to the bind volume so I can access it from the docker host. When I run

docker run -it --entrypoint=/bin/bash -v `pwd`/tmp:/app/tmp alekzonder/docker-puppeteer
pptruser@ip-172-31-26-224:/app$ cd tmp
pptruser@ip-172-31-26-224:/app/tmp$ mkdir f
mkdir: cannot create directory ‘f’: Permission denied
pptruser@ip-172-31-26-224:/app/tmp$ ls -all .
total 8
drwxrwxr-x 2      500      500 4096 Feb 27 18:43 .
drwxr-xr-x 1 pptruser pptruser 4096 Feb 27 19:21 ..

So you see the bind volume is not owned by pptruser, therefore we cannot write files to it to share with the docker host. You might want to mention a workaround in Readme.md. If you can suggest one I'm happy to submit a PR.

rafipiccolo commented 3 years ago

its a common strategy with docker volumes. you need to chown to the proper user before running the container.

this may work

# get userId inside container
$> docker run --rm -ti alekzonder/puppeteer id
uid=999(pptruser) gid=999(pptruser) groups=999(pptruser),29(audio),44(video)
# chown
$> chown -r 999:999 /somePathOnTheHost

or just force container to execute as root.