Docker Image

This Docker image provides an easy way to run an OpenIO namespace. It deploys and configure a simple non-replicated namespace in a single container.

OpenIO SDS service discovery and resolution relies on IP addresses, meaning that you can’t change service IPs after they have been registered to the cluster. By default, Docker networking may change you IP when your container restarts, and this is not compatible with OpenIO SDS at the moment.


First, download the OpenIO Docker image from the Docker Hub:

pull docker image
docker pull openio/sds:20.04

Start a simple Docker container

run image
docker run --name oio-sds openio/sds:20.04
run image and map the oioswift port
docker run --name oio-sds -p 6007:6007 openio/sds

Retrieve the container’s private IP with the following command.

Get IP of container named “oio-sds”
docker inspect -f '{{ .NetworkSettings.IPAddress }}' oio-sds

For the rest of this guide, consider that the private IP is

Now, you can access OpenIO SDS server from any other Docker container with the ip address, user demo:demo and password DEMO_PASS

Openstack swift

Install the swift client on your docker host and use it like this :

test with the swift client
yum  install python-swiftclient
swift -A -U demo:demo -K DEMO_PASS stat


Create configuration files in your home directory like:

aws_access_key_id = demo:demo
aws_secret_access_key = DEMO_PASS
region = us-east-1
s3 =
  signature_version = s3v4
  max_concurrent_requests = 20
  max_queue_size = 100
  multipart_threshold = 10GB
  multipart_chunksize = 10MB

And install the AWS client and use it like this :

create bucket with awscli
yum install awscli
aws --endpoint-url --no-verify-ssl s3 mb s3://bucket1

You can also use a compliant S3 appliance like describe in the integration part.


Use the openio client in the docker instance

create object with openio cli
docker ps
docker exec -it <container_ID> bash
# echo 'Hello OpenIO!' > test.txt
# openio object create MY_OIO_CONTAINER test.txt --oio-account=MY_ACCOUNT --ns=OPENIO

Customize your docker instance

Use the host network interface

You can start an instance using Docker host mode networking. This allows you to access services outside your container. You can specify the interface or the IP address you want to use.

Setting the interface

Bind the Docker container to your interface eth0.

use your local interface
docker run -e OPENIO_IFDEV=eth0 --net=host openio/sds

Specifying the IP

Bind the Docker container to your ip local address

use your local address
docker run -e OPENIO_IPADDR= --net=host openio/sds

Binding to host port

Bind the Docker container to your ip local address and port 6007.

use your local address and choose the port
docker run -p openio/sds

Change the credentials

Default credentials are demo:demo as user and DEMO_PASS as password.

You can change this default with:

setup your own credentials
docker run -e SWIFT_CREDENTIALS="myproject:myuser:mypassword:.admin" openio/sds

Change the S3 region

Default region is us-east-1

You can change this default with:

change aws region
docker run -e REGION="us-west-1" openio/sds

Increase number of workers

By default, oioswift have only 1 worker.

Use an integer to override this default:

increase worker
docker run -e WORKERS=2 openio/sds

In this example, you will have 2 workers configured in oioswift.

Increase number of meta2

By default, the docker image contains only one service meta2.

You can add additional services meta2 with:

increase worker
docker run -e SUPPL_M2=3 openio/sds

In this example, you will have 4 services meta2 in the container.

Use the API

Before using openio CLI or Python, Java or C API from the outside, copy the contents of /etc/oio/sds.conf.d/OPENIO from the container to the same file on your host.

get namespace configuration
docker exec -it <container_ID> /bin/cat /etc/oio/sds.conf.d/OPENIO > /etc/oio/sds.conf.d/OPENIO

Mount your local storage

The purpose of this image is mainly the POC or the continuous integration. However, it is quite possible to save your data locally.

mount local volume
mkdir accounting metadata-level0 metadata-level1 metadata-level2 data
sudo chown 120:220 accounting metadata-level0 metadata-level1 metadata-level2 data
docker run \
  -v $PWD/metadata-level0:/var/lib/oio/sds/OPENIO/meta0-0 \
  -v $PWD/metadata-level1:/var/lib/oio/sds/OPENIO/meta1-0 \
  -v $PWD/metadata-level2:/var/lib/oio/sds/OPENIO/meta2-0 \
  -v $PWD/accounting:/var/lib/oio/sds/OPENIO/redis-0 \
  -v $PWD/data:/var/lib/oio/sds/OPENIO/rawx-0 \