2018-12-04 01:59:03 +01:00
# onedrive docker image
Thats right folks onedrive is now dockerized ;)
This container offers simple monitoring-mode service for 'Free Client for OneDrive on Linux'.
2019-11-20 21:02:56 +01:00
## Basic Setup
2019-01-22 02:31:57 +01:00
2019-01-25 15:03:40 +01:00
### 0. Install docker under your own platform's instructions
2019-01-22 02:31:57 +01:00
2019-01-22 02:34:44 +01:00
### 1. Pull the image
2019-01-22 02:31:57 +01:00
2019-01-06 17:02:58 +01:00
```bash
2020-07-26 10:48:31 +02:00
docker pull driveone/onedrive:latest
2018-12-04 01:59:03 +01:00
```
2019-01-23 02:20:52 +01:00
2019-01-06 00:14:49 +01:00
**NOTE:** SELinux context needs to be configured or disabled for Docker, to be able to write to OneDrive host directory.
2018-12-04 01:59:03 +01:00
2019-11-20 21:02:56 +01:00
### 2. Prepare config volume
2019-01-22 02:31:57 +01:00
2019-11-20 21:02:56 +01:00
Onedrive needs two volumes. One of them is the config volume. Create it with:
2019-01-23 02:20:52 +01:00
2019-01-06 00:14:49 +01:00
```bash
2019-01-25 15:03:40 +01:00
docker volume create onedrive_conf
2019-01-22 02:31:57 +01:00
```
2018-12-04 01:59:03 +01:00
2019-11-20 21:02:56 +01:00
This will create a docker volume labeled `onedrive_conf` , where all configuration of your onedrive account will be stored. You can add a custom config file and other things later.
2019-01-22 02:31:57 +01:00
2019-11-20 21:02:56 +01:00
The second docker volume is for your data folder and is created in the next step. It needs the path to a folder on your filesystem that you want to keep in sync with OneDrive. Keep in mind that:
2019-01-22 09:37:47 +01:00
2019-11-20 21:02:56 +01:00
- The owner of your specified folder must not be root
2019-01-23 02:20:52 +01:00
2019-11-20 21:02:56 +01:00
- The owner of your specified folder must have permissions for its parent directory
2019-01-22 02:31:57 +01:00
2019-01-22 02:34:44 +01:00
### 3. First run
2019-01-22 02:31:57 +01:00
2020-07-03 21:34:42 +02:00
Onedrive needs to be authorized with your Microsoft account. This is achieved by running docker in interactive mode. Run the docker image with the two commands below and **make sure to change `onedriveDir` to the onedrive data directory on your filesystem (e.g. `"/home/abraunegg/OneDrive"`)** .
Additionally, the user id and group id should be added to remove any potential user conflicts, denoted by the environment variables `${ONEDRIVE_UID}` and `${ONEDRIVE_GID}` .
2019-01-23 02:20:52 +01:00
2019-01-22 02:31:57 +01:00
```bash
onedriveDir="${HOME}/OneDrive"
2020-07-26 10:48:31 +02:00
docker run -it --name onedrive -v onedrive_conf:/onedrive/conf -v "${onedriveDir}:/onedrive/data" -e "ONEDRIVE_UID:${ONEDRIVE_UID}" -e "ONEDRIVE_GID:${ONEDRIVE_GID}" driveone/onedrive:latest
2018-12-04 01:59:03 +01:00
```
2019-01-22 02:31:57 +01:00
2019-01-23 02:20:52 +01:00
- You will be asked to open a specific link using your web browser
2019-11-20 21:02:56 +01:00
- Login to your Microsoft Account and give the application the permission
2019-01-23 02:20:52 +01:00
- After giving the permission, you will be redirected to a blank page.
- Copy the URI of the blank page into the application.
2019-01-22 02:31:57 +01:00
2019-11-20 21:02:56 +01:00
The onedrive monitor is configured to start with your host system. If your onedrive is working as expected, you can detach from the container with Ctrl+p, Ctrl+q.
2019-01-22 02:31:57 +01:00
2019-01-22 04:40:19 +01:00
### 4. Status, stop, and restart
2019-01-22 02:31:57 +01:00
2019-11-20 21:02:56 +01:00
Check if the monitor service is running
2019-01-23 02:20:52 +01:00
2019-01-06 17:02:58 +01:00
```bash
2018-12-04 01:59:03 +01:00
docker ps -f name=onedrive
```
2019-01-22 02:31:57 +01:00
Show monitor run logs
2019-01-23 02:20:52 +01:00
2019-01-06 17:02:58 +01:00
```bash
2018-12-04 01:59:03 +01:00
docker logs onedrive
```
2019-01-22 02:31:57 +01:00
Stop running monitor
2019-01-23 02:20:52 +01:00
2019-01-06 17:02:58 +01:00
```bash
2018-12-04 01:59:03 +01:00
docker stop onedrive
```
2019-01-22 02:31:57 +01:00
Resume monitor
2019-01-23 02:20:52 +01:00
2019-01-06 17:02:58 +01:00
```bash
2018-12-04 01:59:03 +01:00
docker start onedrive
```
2019-01-22 02:31:57 +01:00
2019-11-20 21:02:56 +01:00
Remove onedrive monitor
2019-01-23 02:20:52 +01:00
2019-01-06 17:02:58 +01:00
```bash
2018-12-04 01:59:03 +01:00
docker rm -f onedrive
```
2019-11-20 21:02:56 +01:00
## Advanced Setup
2019-01-22 02:31:57 +01:00
2020-07-03 21:34:42 +02:00
### 5. Docker-compose
Also supports docker-compose schemas > 3.
In the following example it is assumed you have a `onedriveDir` environment variable and a `onedrive_conf` volume.
However, you can also use bind mounts for the configuration folder, e.g. `export ONEDRIVE_CONF="${HOME}/OneDriveConfig"` .
```
version: "3"
services:
onedrive:
2020-07-26 10:48:31 +02:00
image: driveone/onedrive:latest
2020-07-03 21:34:42 +02:00
restart: unless-stopped
environment:
- ONEDRIVE_UID=${PUID}
- ONEDRIVE_GID=${PGID}
volumes:
- onedrive_conf:/onedrive/conf
- ${onedriveDir}:/onedrive/data
```
Note that you still have to perform step 3: First Run.
### 6. Edit the config
2019-01-22 02:31:57 +01:00
2019-11-20 21:02:56 +01:00
Onedrive should run in default configuration, however you can change your configuration by placing a custom config file in the `onedrive_conf` docker volume. First download the default config from [here ](https://raw.githubusercontent.com/abraunegg/onedrive/master/config )
2019-01-23 05:46:41 +01:00
Then put it into your onedrive_conf volume path, which can be found with:
```bash
docker volume inspect onedrive_conf
```
2019-01-22 09:37:47 +01:00
2019-11-20 21:02:56 +01:00
Or you can map your own config folder to the config volume. Make sure to copy all files from the docker volume into your mapped folder first.
2019-01-22 09:37:47 +01:00
2020-11-03 02:08:16 +01:00
The detailed document for the config can be found here: [Configuration ](https://github.com/abraunegg/onedrive/blob/master/docs/USAGE.md#configuration )
2019-01-22 02:31:57 +01:00
2020-07-03 21:34:42 +02:00
### 7. Sync multiple accounts
2019-11-20 21:02:56 +01:00
There are many ways to do this, the easiest is probably to
1. Create a second docker config volume (replace `Work` with your desired name): `docker volume create onedrive_conf_Work`
2. And start a second docker monitor container (again replace `Work` with your desired name):
```
onedriveDirWork="/home/abraunegg/OneDriveWork"
2020-07-26 10:48:31 +02:00
docker run -it --restart unless-stopped --name onedrive_Work -v onedrive_conf_Work:/onedrive/conf -v "${onedriveDirWork}:/onedrive/data" driveone/onedrive:latest
2019-11-20 21:02:56 +01:00
```
2019-01-22 02:31:57 +01:00
## Run or update with one script
2019-01-23 02:20:52 +01:00
2019-01-22 02:31:57 +01:00
If you are experienced with docker and onedrive, you can use the following script:
2019-01-23 02:20:52 +01:00
2019-01-22 02:31:57 +01:00
```bash
# Update onedriveDir with correct existing OneDrive directory path
onedriveDir="${HOME}/OneDrive"
firstRun='-d'
2020-07-26 10:48:31 +02:00
docker pull driveone/onedrive:latest
2019-01-22 02:31:57 +01:00
docker inspect onedrive_conf > /dev/null || { docker volume create onedrive_conf; firstRun='-it'; }
docker inspect onedrive > /dev/null & & docker rm -f onedrive
2020-07-26 10:48:31 +02:00
docker run $firstRun --restart unless-stopped --name onedrive -v onedrive_conf:/onedrive/conf -v "${onedriveDir}:/onedrive/data" driveone/onedrive:latest
2019-01-22 02:31:57 +01:00
```
2019-09-09 05:44:07 +02:00
## Environment Variables
| Variable | Purpose | Sample Value |
| ---------------- | --------------------------------------------------- |:-------------:|
| < B > ONEDRIVE_UID< / B > | UserID (UID) to run as | 1000 |
| < B > ONEDRIVE_GID< / B > | GroupID (GID) to run as | 1000 |
2019-09-23 22:13:28 +02:00
| < B > ONEDRIVE_VERBOSE< / B > | Controls "--verbose" switch on onedrive sync. Default is 0 | 1 |
| < B > ONEDRIVE_DEBUG< / B > | Controls "--verbose --verbose" switch on onedrive sync. Default is 0 | 1 |
2020-10-16 22:11:00 +02:00
| < B > ONEDRIVE_DEBUG_HTTPS< / B > | Controls "--debug-https" switch on onedrive sync. Default is 0 | 1 |
2019-09-23 22:13:28 +02:00
| < B > ONEDRIVE_RESYNC< / B > | Controls "--resync" switch on onedrive sync. Default is 0 | 1 |
2020-10-26 19:49:25 +01:00
| < B > ONEDRIVE_DOWNLOADONLY< / B > | Controls "--download-only" switch on onedrive sync. Default is 0 | 1 |
2020-12-20 21:06:18 +01:00
| < B > ONEDRIVE_LOGOUT< / B > | Controls "--logout" switch. Default is 0 | 1 |
2019-09-23 22:13:28 +02:00
### Usage Examples
**Verbose Output:**
```bash
2020-07-26 10:48:31 +02:00
docker container run -e ONEDRIVE_VERBOSE=1 -v onedrive_conf:/onedrive/conf -v "${onedriveDir}:/onedrive/data" driveone/onedrive:latest
2019-09-23 22:13:28 +02:00
```
**Debug Output:**
```bash
2020-07-26 10:48:31 +02:00
docker container run -e ONEDRIVE_DEBUG=1 -v onedrive_conf:/onedrive/conf -v "${onedriveDir}:/onedrive/data" driveone/onedrive:latest
2019-09-23 22:13:28 +02:00
```
**Perform a --resync:**
```bash
2020-07-26 10:48:31 +02:00
docker container run -e ONEDRIVE_RESYNC=1 -v onedrive_conf:/onedrive/conf -v "${onedriveDir}:/onedrive/data" driveone/onedrive:latest
2019-09-23 22:13:28 +02:00
```
**Perform a --resync and --verbose:**
```bash
2020-07-26 10:48:31 +02:00
docker container run -e ONEDRIVE_RESYNC=1 -e ONEDRIVE_VERBOSE=1 -v onedrive_conf:/onedrive/conf -v "${onedriveDir}:/onedrive/data" driveone/onedrive:latest
2019-09-23 22:13:28 +02:00
```
2019-09-09 05:44:07 +02:00
2020-12-20 21:06:18 +01:00
**Perform a --logout and re-authenticate:**
```bash
docker container run -e ONEDRIVE_LOGOUT=1 -v onedrive_conf:/onedrive/conf -v "${onedriveDir}:/onedrive/data" driveone/onedrive:latest
```
2018-12-04 01:59:03 +01:00
## Build instructions
2020-06-28 00:48:01 +02:00
### Build Environment Requirements
* Build environment must have at least 1GB of memory & 2GB swap space
There are 2 ways to validate this requirement:
* Modify the file `/etc/dphys-swapfile` and edit the `CONF_SWAPSIZE` , for example: `CONF_SWAPSIZE=2024` . A reboot is required to make this change effective.
* Dynamically allocate a swapfile for building:
```bash
cd /var
sudo fallocate -l 1.5G swapfile
sudo chmod 600 swapfile
sudo mkswap swapfile
sudo swapon swapfile
# make swap permanent
sudo nano /etc/fstab
# add "/swapfile swap swap defaults 0 0" at the end of file
# check it has been assigned
swapon -s
free -h
```
### Building the Docker image
2021-01-08 20:13:09 +01:00
You can also build your own image instead of pulling the one from [hub.docker.com ](https://hub.docker.com/r/driveone/onedrive ):
2019-01-06 00:14:49 +01:00
```bash
2018-12-04 01:59:03 +01:00
git clone https://github.com/abraunegg/onedrive
2019-01-25 15:03:40 +01:00
cd onedrive
2019-06-11 10:40:05 +02:00
docker build . -t local-onedrive -f contrib/docker/Dockerfile
2018-12-04 01:59:03 +01:00
```
2019-02-16 20:13:19 +01:00
There are alternate, smaller images available by building
Dockerfile-stretch or Dockerfile-alpine. These [multi-stage builder
pattern](https://docs.docker.com/develop/develop-images/multistage-build/)
Dockerfiles require Docker version at least 17.05.
2021-01-08 20:13:09 +01:00
#### How to build a Docker image based on Debian Stretch
2019-02-16 20:13:19 +01:00
``` bash
2019-06-11 10:40:05 +02:00
docker build . -t local-ondrive-stretch -f contrib/docker/Dockerfile-stretch
2019-02-16 20:13:19 +01:00
```
2021-01-08 20:13:09 +01:00
#### How to build a Docker image based on Alpine Linux
2019-02-16 20:13:19 +01:00
``` bash
2019-06-11 10:40:05 +02:00
docker build . -t local-ondrive-alpine -f contrib/docker/Dockerfile-alpine
2019-02-16 20:13:19 +01:00
```
2021-01-08 20:13:09 +01:00
#### How to build a Docker image for ARMHF (Raspberry Pi)
``` bash
docker build . -t local-onedrive-rpi -f contrib/docker/Dockerfile-rpi
```