Official Repository

Last pushed: a month ago
Short Description
Odoo (formerly known as OpenERP) is a suite of open-source business apps.
Full Description

Supported tags and respective Dockerfile links

Quick reference

What is Odoo?

Odoo, formerly known as OpenERP, is a suite of open-source business apps written in Python and released under the AGPL license. This suite of applications covers all business needs, from Website/Ecommerce down to manufacturing, inventory and accounting, all seamlessly integrated. It is the first time ever a software editor managed to reach such a functional coverage. Odoo is the most installed business software in the world. Odoo is used by 2.000.000 users worldwide ranging from very small companies (1 user) to very large ones (300 000 users).

www.odoo.com

How to use this image

This image requires a running PostgreSQL server.

Start a PostgreSQL server

$ docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo --name db postgres:9.4

Start an Odoo instance

$ docker run -p 8069:8069 --name odoo --link db:db -t odoo

The alias of the container running Postgres must be db for Odoo to be able to connect to the Postgres server.

Stop and restart an Odoo instance

$ docker stop odoo
$ docker start -a odoo

Stop and restart a PostgreSQL server

When a PostgreSQL server is restarted, the Odoo instances linked to that server must be restarted as well because the server address has changed and the link is thus broken.

Restarting a PostgreSQL server does not affect the created databases.

Run Odoo with a custom configuration

The default configuration file for the server (located at /etc/odoo/openerp-server.conf) can be overriden at startup using volumes. Suppose you have a custom configuration at /path/to/config/openerp-server.conf, then

$ docker run -v /path/to/config:/etc/odoo -p 8069:8069 --name odoo --link db:db -t odoo

Please use this configuration template to write your custom configuration as we already set some arguments for running Odoo inside a Docker container.

You can also directly specify Odoo arguments inline. Those arguments must be given after the keyword -- in the command-line, as follows

$ docker run -p 8069:8069 --name odoo --link db:db -t odoo -- --db-filter=odoo_db_.*

Mount custom addons

You can mount your own Odoo addons within the Odoo container, at /mnt/extra-addons

$ docker run -v /path/to/addons:/mnt/extra-addons -p 8069:8069 --name odoo --link db:db -t odoo

Run multiple Odoo instances

$ docker run -p 8070:8069 --name odoo2 --link db:db -t odoo
$ docker run -p 8071:8069 --name odoo3 --link db:db -t odoo

Please note that for plain use of mails and reports functionalities, when the host and container ports differ (e.g. 8070 and 8069), one has to set, in Odoo, Settings->Parameters->System Parameters (requires technical features), web.base.url to the container port (e.g. 127.0.0.1:8069).

Environment Variables

Tweak these environment variables to easily connect to a postgres server:

  • HOST: The address of the postgres server. If you used a postgres container, set to the name of the container. Defaults to db.
  • PORT: The port the postgres server is listening to. Defaults to 5432.
  • USER: The postgres role with which Odoo will connect. If you used a postgres container, set to the same value as POSTGRES_USER. Defaults to odoo.
  • PASSWORD: The password of the postgres role with which Odoo will connect. If you used a postgres container, set to the same value as POSTGRES_PASSWORD. Defaults to odoo.

Docker Compose examples

The simplest docker-compose.yml file would be:

version: '2'
services:
  web:
    image: odoo:10.0
    depends_on:
      - db
    ports:
      - "8069:8069"
  db:
    image: postgres:9.4
    environment:
      - POSTGRES_PASSWORD=odoo
      - POSTGRES_USER=odoo

If the default postgres credentials does not suit you, tweak the environment variables:

version: '2'
services:
  web:
    image: odoo:10.0
    depends_on:
      - mydb
    ports:
      - "8069:8069"
    environment:
    - HOST=mydb
    - USER=odoo
    - PASSWORD=myodoo
  mydb:
    image: postgres:9.4
    environment:
      - POSTGRES_USER=odoo
      - POSTGRES_PASSWORD=myodoo

Here's a last example showing you how to mount custom addons, how to use a custom configuration file and how to use volumes for the Odoo and postgres data dir:

version: '2'
services:
  web:
    image: odoo:10.0
    depends_on:
      - db
    ports:
      - "8069:8069"
    volumes:
      - odoo-web-data:/var/lib/odoo
      - ./config:/etc/odoo
      - ./addons:/mnt/extra-addons
  db:
    image: postgres:9.4
    environment:
      - POSTGRES_PASSWORD=odoo
      - POSTGRES_USER=odoo
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - odoo-db-data:/var/lib/postgresql/data/pgdata
volumes:
  odoo-web-data:
  odoo-db-data:

To start your Odoo instance, go in the directory of the docker-compose.yml file you created from the previous examples and type:

docker-compose up -d

How to upgrade this image

Odoo images are updated on a regular basis to make them use recent releases (a new release of each version of Odoo is built every night). Please be aware that what follows is about upgrading from an old release to the latest one provided of the same major version, as upgrading from a major version to another is a much more complex process requiring elaborated migration scripts (see Odoo Enterprise Upgrade page or this community project which aims to write those scripts).

Suppose you created a database from an Odoo instance named old-odoo, and you want to access this database from a new Odoo instance named new-odoo, e.g. because you've just downloaded a newer Odoo image.

By default, Odoo 8.0 uses a filestore (located at /var/lib/odoo/filestore/) for attachments. You should restore this filestore in your new Odoo instance by running

$ docker run --volumes-from old-odoo -p 8070:8069 --name new-odoo --link db:db -t odoo

You can also simply prevent Odoo from using the filestore by setting the system parameter ir_attachment.location to db-storage in Settings->Parameters->System Parameters (requires technical features).

License

View license information for the software contained in this image.

Docker Pull Command

Comments (48)
phoanglong
3 hours ago

Hi guys,

I have been testing odoo for about 2 weeks now, my site is kind of up and run when I tried to uninstall Live_chat module, everything seems broken to part ... I have quite a lot of data on my test_odoo_machine, so it is greatly appreciated if someone could help me out.

Instead of install odoo on ubuntu or windows like most other people, I wanted to try something different so i go with DOCKER_VERSION of odoo.. everything was working fine until i tried to uninstall live_chat module, everything stop workings and I have been searching, searching and searching for solution but without lucks.

Could someone please help me, here is the log:

24 10:53:14,202 1 [1;32m[1;49mINFO[0m edh_vietnam werkzeug: 172.17.0.1 - - [24/Jul/2017 10:53:14] "GET / HTTP/1.1" 500 - 24 10:53:14,210 1 [1;31m[1;49mERROR[0m edh_vietnam werkzeug: Error on request:

k (most recent call last):

sr/lib/python2.7/dist-packages/werkzeug/serving.py", line 177, in run_wsgi self.server.app)

sr/lib/python2.7/dist-packages/werkzeug/serving.py", line 165, in execute ion_iter = app(environ, start_response)

sr/lib/python2.7/dist-packages/odoo/service/server.py", line 246, in app elf.app(e, s)

sr/lib/python2.7/dist-packages/odoo/service/wsgi_server.py", line 184, in application pplication_unproxied(environ, start_response)

sr/lib/python2.7/dist-packages/odoo/service/wsgi_server.py", line 170, in application_unproxied handler(environ, start_response)

sr/lib/python2.7/dist-packages/odoo/http.py", line 1306, in call elf.dispatch(environ, start_response)

sr/lib/python2.7/dist-packages/odoo/http.py", line 1280, in call elf.app(environ, start_wrapped)

sr/lib/python2.7/dist-packages/werkzeug/wsgi.py", line 588, in call elf.app(environ, start_response)

sr/lib/python2.7/dist-packages/odoo/http.py", line 1471, in dispatch ir_http._dispatch()

sr/lib/python2.7/dist-packages/odoo/addons/website/models/ir_http.py", line 191, in _dispatch url_lang and request.website_multilang and request.lang != request.website.default_lang_code)

sr/lib/python2.7/dist-packages/odoo/fields.py", line 869, in get ermine_value(record)

sr/lib/python2.7/dist-packages/odoo/fields.py", line 971, in determine_value prefetch_field(self)

sr/lib/python2.7/dist-packages/odoo/models.py", line 3056, in _prefetch_field records.read([f.name for f in fs], load='_classic_write')

sr/lib/python2.7/dist-packages/odoo/models.py", line 2996, in read ad_from_database(stored, inherited)

sr/lib/python2.7/dist-packages/odoo/models.py", line 3124, in _read_from_database te(query_str, params)

sr/lib/python2.7/dist-packages/odoo/sql_db.py", line 141, in wrapper

(self, args, *kwargs)

sr/lib/python2.7/dist-packages/odoo/sql_db.py", line 218, in execute lf._obj.execute(query, params)

ingError: column website.channel_id does not exist

...d","website"."social_youtube" as "social_youtube","website"....

24 10:53:14,484 1 [1;32m[1;49mINFO[0m edh_vietnam odoo.sql_db: bad query: SELECT "website"."company_id" as "company_id","website"."social_linkedin" as "social_linkedin","website"."id" as "id","website"."compress_html" as "compress_html","website"."google_analytics_key" as "google_analytics_key","website"."create_uid" as "create_uid","website"."cdn_activated" as "cdn_activated","website"."default_lang_id" as "default_lang_id","website"."website_form_enable_metadata" as "website_form_enable_metadata","website"."name" as "name","website"."write_uid" as "write_uid","website"."social_youtube" as "social_youtube","website"."channel_id" as "channel_id","website"."social_twitter" as "social_twitter","website"."domain" as "domain","website"."user_id" as "user_id","website"."cdn_filters" as "cdn_filters","website"."social_facebook" as "social_facebook","website"."cdn_url" as "cdn_url","website"."create_date" as "create_date","website"."social_github" as "social_github","website"."default_lang_code" as "default_lang_code","website"."write_date" as "write_date","website"."social_googleplus" as "social_googleplus" FROM "website"

ebsite".id IN (1) ORDER BY "website"."id"

haradrim
16 days ago

I'm having some problems with multiple Odoo instances. I followed the instructions above and the first instance, the one linked to port 8069 runs just fine, but the second one, port 8070, doesn't load it's css properly. Anything that I might be missing ?

thsdrouot
18 days ago

@spacegoing I did the same as you. The native modules from Odoo were not loaded. So, I had to inverse the path to make the native module loaded :

addons_path =/usr/lib/python2.7/dist-packages/odoo/addons,/mnt/extra-addons

It is working. However, I got a 404 error for the images :

-->docker-compose logs :
[06/Jul/2017 08:39:18] "GET /web/static/src/img/placeholder.png HTTP/1.1" 404 -
...
...
...
...
etc

Did you encountered that ? Does anyone succeed to fix it ?

Thanks

javierex
24 days ago

Hello, when i run at least 3 or 4 docker containers from de the image odoo:8, i get the following error:

Error:
2017-06-30 14:29:06,741 1 INFO ? openerp.service.server: Watching addons folder /var/lib/odoo/addons/8.0
2017-06-30 14:29:06,742 1 INFO ? openerp.service.server: Watching addons folder /mnt/extra-addons
2017-06-30 14:29:06,789 1 INFO ? openerp.service.server: Watching addons folder /usr/lib/python2.7/dist-packages/openerp/addons
[2017-06-30 14:29:08,703 pyinotify ERROR] add_watch: cannot watch /usr/lib/python2.7/dist-packages/openerp/addons/sale_service/security WD=-1, Errno=No space left on device (ENOSPC)
2017-06-30 14:29:08,703 1 ERROR ? pyinotify: add_watch: cannot watch /usr/lib/python2.7/dist-packages/openerp/addons/sale_service/security WD=-1, Errno=No space left on device (ENOSPC)
[2017-06-30 14:29:08,703 pyinotify ERROR] add_watch: cannot watch /usr/lib/python2.7/dist-packages/openerp/addons/sale_service/test WD=-1, Errno=No space left on device (ENOSPC)
2017-06-30 14:29:08,703 1 ERROR ? pyinotify: add_watch: cannot watch /usr/lib/python2.7/dist-packages/openerp/addons/sale_service/test WD=-1, Errno=No space left on device (ENOSPC)
[2017-06-30 14:29:08,704 pyinotify ERROR] add_watch: cannot watch /usr/lib/python2.7/dist-packages/openerp/addons/sale_service/views WD=-1, Errno=No space left on device (ENOSPC)
2017-06-30 14:29:08,704 1 ERROR ? pyinotify: add_watch: cannot watch /usr/lib/python2.7/dist-packages/openerp/addons/sale_service/views WD=-1, Errno=No space left on device (ENOSPC)

Docker Run Command:
MODULE_NAME=test
BUILD_TAG=test

docker run -v ${PWD}/addons/$MODULE_NAME/:/mnt/extra-addons/$MODULE_NAME/ -p :8069 --name ${BUILD_TAG} --link ${BUILD_TAG}-db:db -t $DOCKER_IMAGE_NAME -- -i $MODULE_NAME -d ${BUILD_TAG}

Please, let me know if you have any idea of what could be happening.

spacegoing
a month ago

@progeek I met the same problem. However I'm using Docker Compose examples which mount your local ./config to /etc/odoo. By doing this, your local config file will shadow odoo's original config file. Thus odoo doesn't know where to look for addons.

To solve this I simply add a odoo.conf file under ./config with following lines:

[options]
addons_path = /mnt/extra-addons,/usr/lib/python2.7/dist-packages/odoo/addons
data_dir = /var/lib/odoo
progeek
4 months ago

Custom addons are not updated when clicking the update module list button. I can see they are mounted in the container, have read permissions on them and tried pretty much everything suggested and still cant install the addons because they wont come up in the list. Im getting addons from the official odoo website for the correct version of odoo. Any help would be greatly appreciated. Thanks

nopbongdem
4 months ago

Let me ask why when I create the report only supports alphabet fonts?

noahzao
5 months ago

how can I use this docker with postgresql 9.5 ?

edxz
7 months ago

Static files failed to load with the following error message when using this docker image
Failed to load resource: the server responded with a status of 404 (NOT FOUND)

this is my docker-compose.yml

odoo:
  image: odoo:latest
  ports:
    - 8069:8069
  links:
    - db
  environment:
    - PGHOST=db
    - PGUSER=odoo
    - PGPASSWORD=odoo
  volumes:
    - ./config:/etc/odoo
    - ./addons:/mnt/extra-addons
db:
  image: postgres:latest
  environment:
    - POSTGRES_USER=odoo
    - POSTGRES_PASSWORD=odoo
  ports:
   - 5433:5432

anyone else with the same issue?

andreilhicas
7 months ago

Hi,

I have a question,
I have uploaded a dump.sql to postgres with previous demo database.
However, I see the sql script being ran in the postgres log but whenever I try to acess odoo after a new clean up in compose (no volumes)

So how can I upload programatically on up (I already did it to postgres) but Odoo doesn't seem to find it, so I can run a test suite against it? Because, the odoo ups as a clean instance with no database attached, but if I try to do the web import it recognizes there is already a DB with such name.

Any help?
Thank you