Running Zammad in Docker without the docker-compose repo

I was directed from issues to here Is there ANY way to run zammad in production in docker, without using the docker-compose repo? I don’t want most of the containers that come with it, for example the postgresql, the nginx or the memcached. I have those services already set-up elsewhere and differently. I just want zammad, in one container, and nothing else.

the zammad service itself contains of 3 main containers; railserver, scheduler and websocket. Also you need the init container for bootstrapping/upgrading (also it set’s a flag file (ZAMMAD_READY_FILE), which the main containers use as hold point before starting. You could adjust the entrypoint to run them all in a single container. Or run those 4 from the repo, and let them connect to your existing service’s. I believe nginx is also used to serve static files so you would have to configure your nginx to serve those.

1 Like

That seems to work okay, but I’m getting a lot of permission denied errors. For example
:zammad-elasticsearch_1 | uncaught exception in thread [main]
zammad-elasticsearch_1 | ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes];
zammad-elasticsearch_1 | Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes

If I disable elasticsearch, I also get similar permission denied -errors on ie. railsserver

Our containers come with specific environments you can set to solve specific issues.
However, they expect to run in the environment we provide (our docker-compose).

While you in theory can adjust those configurations etc etc you may be alone with issues like above.
I’m sorry.

i have a similar request and need to understand the zammad compose structure:

  • if i want to run those 3 zammad services in a single container, which entrypoint i need to setup?
  • i want to use the elastisearch, postgres db and memcached too but not the backup container, is that possible?
  • the nginx container is mandatory for accessing the webinterface?

See the command: properties in de docker-compose.yml, you would need to spawn; zammad-railsserver, zammad-scheduler and zammad-websocket, maybe you can use something like supervisord. Or peak at their dev container, which i believe run’s everything in 1 container. The entrypoint can be found here; zammad-docker-compose/Dockerfile at master · zammad/zammad-docker-compose · GitHub
You can run without the backup container…but of course no backup’s will be made, so you will have todo that your self, if you wish to have backups.
You can run without nginx, but you need some kind of webserver to host the assets, see nginx.conf;
location ~ ^/(assets/|robots.txt|humans.txt|favicon.ico|apple-touch-icon.png)

first of all, thank you for your support, i really appreciate the suggestion

one question before i proceed to test the new setup: what permissions (user:group) cointainers volume require on hosts? i encountered some problem with mounted volume owned by root

everything should be owned by uid/gid 1000/1000

zammad@7f6e3ed95a69:~$ cat /etc/passwd|grep zammad

zammad@7f6e3ed95a69:~$ cat /etc/group|grep zammad

or you should overwrite the uid/gid

everything includes all containers or those one that use zammad (application) image? can i setup it in docker-compose like

user: 1000:1000


i thought your question was about shared storage, which needs to match the rights on which user you are running zammad in your containers

it was about storage indeed because even if I chowned to 1000:1000 all mounted volumes, the postgres container logs gives me

chmod: /var/run/postgresql: Operation not permitted
initdb: could not look up effective user ID 1000: user does not exist

postgres run under it’s own user, which is by default 70.70

thank you for the info

if i want to add this variables to my compose file, where i need to specify them? all containers use them or only zammad image based ones?

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.