Dockerfile fixes

- ref: https://forum.rclone.org/t/run-docker-container-in-userspace/11734/7
- enable userspace operation
- enable Docker userspace mount exposed to the host
- add more Docker image usage documentation
This commit is contained in:
Matei David 2019-09-17 01:15:48 -04:00 committed by Nick Craig-Wood
parent 8fe87c8157
commit 070a8bfcd8
2 changed files with 50 additions and 8 deletions

View file

@ -12,10 +12,11 @@ RUN ./rclone version
# Begin final image # Begin final image
FROM alpine:latest FROM alpine:latest
RUN apk --no-cache add ca-certificates RUN apk --no-cache add ca-certificates fuse
WORKDIR /root/ COPY --from=builder /go/src/github.com/rclone/rclone/rclone /usr/local/bin/
COPY --from=builder /go/src/github.com/rclone/rclone/rclone . ENTRYPOINT [ "rclone" ]
ENTRYPOINT [ "./rclone" ] WORKDIR /data
ENV XDG_CONFIG_HOME=/config

View file

@ -102,13 +102,54 @@ rclone v1.49.1
- go version: go1.12.9 - go version: go1.12.9
``` ```
You will probably want to mount rclone's config file directory or file There are a few command line options to consider when starting an rclone Docker container
from the host, or configure rclone with environment variables. from the rclone image.
Eg to share your local config with the container - You need to mount the host rclone config dir at `/config` into the Docker container.
Due to the way in which rclone updates tokens inside its config file, you need to
mount a host config dir, not just a host config file.
- You need to mount a host data dir at `/data` into the Docker container.
- By default, the rclone binary inside a Docker container runs with UID=0 (root).
As a result, all files created in a run will have UID=0. If your config and data files
reside on the host with a non-root UID:GID, you need to pass these on the container
start command line.
- It is possible to use `rclone mount` inside a userspace Docker container, and expose
the resulting fuse mount to the host. The exact `docker run` options to do that might
vary slightly between hosts. See, e.g. the discussion in this
[thread](https://github.com/moby/moby/issues/9448).
You also need to mount the host `/etc/passwd` and `/etc/group` for fuse to work inside
the container.
Here are some commands tested on an Ubuntu 18.04.3 host:
``` ```
docker run -v ~/.config/rclone:/root/.config/rclone rclone/rclone:latest listremotes # config on host at ~/.config/rclone/rclone.conf
# data on host at ~/data
# make sure the config is ok by listing the remotes
docker run --rm \
--volume ~/.config/rclone:/config/rclone \
--volume ~/data:/data:shared \
--user $(id -u):$(id -g) \
rclone/rclone \
listremotes
# perform mount inside Docker container, expose result to host
mkdir -p ~/data/mount
docker run --rm \
--volume ~/.config/rclone:/config/rclone \
--volume ~/data:/data:shared \
--user $(id -u):$(id -g) \
--volume /etc/passwd:/etc/passwd:ro --volume /etc/group:/etc/group:ro \
--device /dev/fuse --cap-add SYS_ADMIN --security-opt apparmor:unconfined \
rclone/rclone \
mount dropbox:Photos /data/mount &
ls ~/data/mount
kill %1
``` ```
## Install from source ## ## Install from source ##