Installing with Docker


ownCloud can be installed using the official ownCloud Docker image. This official image works standalone for a quick evaluation but is designed to be used in a docker-compose setup.

Preceding sudo in the docker commands is not necessary if you add your user to the docker group by invoking

sudo usermod -aG docker <your-user>

Quick Evaluation

sudo docker run -e OWNCLOUD_DOMAIN=localhost:8080 -p8080:8080 owncloud/server

Docker Compose

The configuration:

  • Exposes ports 8080, allowing for HTTP connections.

  • Uses separate MariaDB and Redis containers.

  • Mounts the data and MySQL data directories on the host for persistent storage.

The following instructions assume you install locally. For remote access, the value of OWNCLOUD_DOMAIN must be adapted.

  1. Create a new project directory. Then copy and paste the sample docker-compose.yml from this page into that new directory.

  2. Create a .env configuration file, which contains the required configuration settings.

Only a few settings are required, these are:

Setting Name Description Example


The ownCloud version



The ownCloud domain



The admin username



The admin user’s password



The HTTP port to bind to


ADMIN_USERNAME and ADMIN_PASSWORD will not change between deploys even if you change the values in the .env file. To change them, you’ll need to do docker volume prune, which will delete all your data.

Then, you can start the container, using your preferred Docker command-line tool. The example below shows how to use Docker Compose.

# Create a new project directory
mkdir owncloud-docker-server

cd owncloud-docker-server

# Copy docker-compose.yml from the GitHub repository

# Create the environment configuration file
cat << EOF > .env

# Build and start the container
sudo docker-compose up -d

When the process completes, check that all the containers have successfully started, by running sudo docker-compose ps. If they are all working correctly, you should see output similar to the one below:

Name Command State Ports

owncloud_mariadb --max …​

Up (healthy)


owncloud_redis --dat …​

Up (healthy)



/usr/bin/entrypoint /usr/b …​

Up (healthy)→8080/tcp

In it, you can see that the database, ownCloud and Redis containers are running, and that ownCloud is accessible via port 8080 on the host machine.

All files stored in this setup are contained in Docker volumes rather than a physical filesystem tree. It is the admin’s responsibility to make the files persistent.

To inspect the volumes run:

sudo docker volume ls | grep ownclouddockerserver

To export the files as a tar archive run:

sudo docker run -v ownclouddockerserver_files:/mnt \
            ubuntu tar cf - -C /mnt . > files.tar

Although the containers are up and running, it may still take a few minutes until ownCloud is fully functional.
To inspect the log output:

sudo docker-compose logs --follow owncloud

Wait until the output shows Starting apache daemon…​ before you access the web UI.

Although all important data persists after:

sudo docker-compose down; docker-compose up -d

there are certain details that get lost, e.g., default apps may re-appear after they were uninstalled.

Logging In

To log in to the ownCloud UI, open http://localhost:8080 in your browser of choice, where you see the standard ownCloud login screen as in the image below.

The ownCloud UI via Docker

The username and password are the credentials which you stored in .env earlier. Note that these will not change between deploys even if you change the values in .env.

Stopping the Containers

Again we assume you used docker-compose like in the previous example.
To stop the containers use:

sudo docker-compose stop

To stop and remove containers along with the related networks, images and volumes:

sudo docker-compose down --rmi all --volumes

Running occ commands

If you want to run an occ command, first go to the directory where your .yaml or .env file is located. Here, you are able to run any command referring to Using the occ Command by entering:

sudo docker-compose exec owncloud occ <command>

Don’t use the php command prefix, this leads to several errors and is not intended to run in docker environments.

Upgrading ownCloud on Docker

When a new version of ownCloud gets released, you should update your instance. To do so, follow these simple steps:

  1. Go to your docker directory where your .yaml and .env files exist.

  2. Put ownCloud into maintenance mode with the following command:

    sudo docker-compose exec owncloud occ maintenance:mode --on
  3. Create a backup in case something goes wrong during the upgrade process, using the following command:

    sudo docker-compose exec mariadb \
         /usr/bin/mysqldump -u root --password=owncloud \
         owncloud > owncloud_$(date +%Y%m%d).sql
    You need to adjust the password and database name if you have changed it in your deployment.
  4. Shutdown the containers:

    sudo docker-compose down
  5. Update the version number of ownCloud in your .env file. You can use sed for it, as in the following example.

    # Make sure that you adjust the example to match your installation.
    sed -i 's/^OWNCLOUD_VERSION=.*$/OWNCLOUD_VERSION=<newVersion>/' /compose/*/.env
  6. View the file to ensure the change has been implemented.

    cat .env
  7. Start your docker instance again.

    sudo docker-compose up -d

Now you should have the current ownCloud running with docker-compose. Note that the container will automatically run occ upgrade when starting up. If you notice the container starting over and over again, you can check the update log with the following command:

sudo docker-compose logs --timestamp owncloud

Docker Compose YAML File

Since ownCloud Server 10.5, the dedicated enterprise docker image is deprecated. All supported enterprise features and apps are now included in the public image owncloud/server available on Docker Hub. A login to our registry is no longer required.

version: "3"

    driver: local
    driver: local
    driver: local

    image: owncloud/server:${OWNCLOUD_VERSION}
    container_name: owncloud_server
    restart: always
      - ${HTTP_PORT}:8080
      - mariadb
      - redis
      - OWNCLOUD_DB_TYPE=mysql
      - OWNCLOUD_DB_NAME=owncloud
      - OWNCLOUD_DB_USERNAME=owncloud
      - OWNCLOUD_DB_PASSWORD=owncloud
      - OWNCLOUD_DB_HOST=mariadb
      test: ["CMD", "/usr/bin/healthcheck"]
      interval: 30s
      timeout: 10s
      retries: 5
      - files:/mnt/data

    image: mariadb:10.5
    container_name: owncloud_mariadb
    restart: always
      - MYSQL_ROOT_PASSWORD=owncloud
      - MYSQL_USER=owncloud
      - MYSQL_PASSWORD=owncloud
      - MYSQL_DATABASE=owncloud
    command: ["--max-allowed-packet=128M", "--innodb-log-file-size=64M"]
      test: ["CMD", "mysqladmin", "ping", "-u", "root", "--password=owncloud"]
      interval: 10s
      timeout: 5s
      retries: 5
      - mysql:/var/lib/mysql

    image: redis:6
    container_name: owncloud_redis
    restart: always
    command: ["--databases", "1"]
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5
      - redis:/data


Raspberry Pi

If your container fails to start on Raspberry Pi or other ARM devices, you most likely have an old version of libseccomp2 on your host. This should only affect distros based on Rasbian Buster 32 bit. Install a newer version with the following command:

cd /tmp
sudo dpkg -i libseccomp2_2.5.1-1_armhf.deb

Alternatively you can add the backports repo for DebianBuster:

sudo apt-key adv --keyserver \
     --recv-keys 04EE7237B7D453EC 648ACFD622F3D138
echo "deb buster-backports main" | \
     sudo tee -a /etc/apt/sources.list.d/buster-backports.list
sudo apt update
sudo apt install -t buster-backports libseccomp2

In any case, you should restart the container after confirming you have libseccomp2.4.4 installed.

For more information see: Linux Server Docs