serve/docker: build docker plugin for multiple platforms #5668

Fixes #5462

Co-authored-by: Ivan Andreev <ivandeex@gmail.com>
This commit is contained in:
Thomas Stachl
2021-07-15 15:35:54 -07:00
committed by Ivan Andreev
parent 4b1ada2d51
commit 015b250905
8 changed files with 95 additions and 93 deletions

View File

@@ -0,0 +1,25 @@
ARG BASE_IMAGE=rclone/rclone:latest
FROM ${BASE_IMAGE} as binaries
# build plugin image
FROM alpine:latest
# put rclone in /usr/bin, reserve /usr/local/bin for plugin wrappers
COPY --from=binaries /usr/local/bin/rclone /usr/bin/rclone
RUN mkdir -p /data/config /data/cache /mnt \
&& apk --no-cache add ca-certificates fuse tzdata \
&& echo "user_allow_other" >> /etc/fuse.conf \
&& rclone version
ENV RCLONE_CONFIG=/data/config/rclone.conf
ENV RCLONE_CACHE_DIR=/data/cache
ENV RCLONE_BASE_DIR=/mnt
ENV RCLONE_VERBOSE=0
ENV HTTP_PROXY=
ENV HTTPS_PROXY=
ENV NO_PROXY=
WORKDIR /data
ENTRYPOINT ["rclone", "serve", "docker"]

View File

@@ -0,0 +1,81 @@
{
"description": "Rclone volume plugin for Docker",
"documentation": "https://rclone.org/docker",
"interface": {
"socket": "rclone.sock",
"types": ["docker.volumedriver/1.0"]
},
"linux": {
"capabilities": [
"CAP_SYS_ADMIN"
],
"devices": [
{
"path": "/dev/fuse"
}
]
},
"network": {
"type": "host"
},
"entrypoint": ["rclone", "serve", "docker"],
"workdir": "/data",
"args": {
"name": "args",
"value": [],
"settable": ["value"]
},
"env": [
{
"name": "RCLONE_VERBOSE",
"value": "0",
"settable": ["value"]
},
{
"name": "RCLONE_CONFIG",
"value": "/data/config/rclone.conf"
},
{
"name": "RCLONE_CACHE_DIR",
"value": "/data/cache"
},
{
"name": "RCLONE_BASE_DIR",
"value": "/mnt"
},
{
"name": "HTTP_PROXY",
"value": "",
"settable": ["value"]
},
{
"name": "HTTPS_PROXY",
"value": "",
"settable": ["value"]
},
{
"name": "NO_PROXY",
"value": "",
"settable": ["value"]
}
],
"mounts": [
{
"name": "config",
"source": "/var/lib/docker-plugins/rclone/config",
"destination": "/data/config",
"type": "bind",
"options": ["rbind"],
"settable": ["source"]
},
{
"name": "cache",
"source": "/var/lib/docker-plugins/rclone/cache",
"destination": "/data/cache",
"type": "bind",
"options": ["rbind"],
"settable": ["source"]
}
],
"propagatedMount": "/mnt"
}

View File

@@ -0,0 +1,19 @@
[Unit]
Description=Docker Volume Plugin for rclone
Requires=docker.service
Before=docker.service
After=network.target
Requires=docker-volume-rclone.socket
After=docker-volume-rclone.socket
[Service]
ExecStart=/usr/bin/rclone serve docker
ExecStartPre=/bin/mkdir -p /var/lib/docker-volumes/rclone
ExecStartPre=/bin/mkdir -p /var/lib/docker-plugins/rclone/config
ExecStartPre=/bin/mkdir -p /var/lib/docker-plugins/rclone/cache
Environment=RCLONE_CONFIG=/var/lib/docker-plugins/rclone/config/rclone.conf
Environment=RCLONE_CACHE_DIR=/var/lib/docker-plugins/rclone/cache
Environment=RCLONE_VERBOSE=1
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,8 @@
[Unit]
Description=Docker Volume Plugin for rclone
[Socket]
ListenStream=/run/docker/plugins/rclone.sock
[Install]
WantedBy=sockets.target