Closed extremeshok closed 7 months ago
@Peddaahh What are you getting when you run
docker-compose exec netfilter-mailcow iptables -L
on the Oracle ARM VM? I keep getting: iptables v1.8.7 (legacy): can't initialize iptables table `filter': iptables who? (do you need to insmod?) Works outside the docker container obviously. I tried building netfilter for arm64v8 instead of the qemu route, iptable_filter is def loaded in the kernel image. š¤ Edit: Scratch that, building netfilter for arm64v8/alpine did work, I just had the image set incorrectly in the compose file. iptables works and the container isn't restarting anymore. Zero issues with the setup since this one is fixed, surprisingly! Activesync, sogo, and everything is performing well.This issue seems to be happen randomly.. some friends of mine complained about that too, some didn't have the issue like me... but yes building this single Container for arm seems to evade the issue... happens perhaps due to the emulation with the amd64 image..
And it is possible in more detail? What to delete? What to create? go into
./data/Dockerfiles/netfilter/
then rundocker build -t mynetfilterImagename .
after the build is done replace the image in your docker-compose file with the correct name of your manually built image
If anyone is interested, I'm maintaining up-to-date docker images of mailcow that are compatible on ARM64/ARMv8, I basically automated the build of https://github.com/mailcow/mailcow-dockerized/tree/master/data/Dockerfiles using GitHub actions: https://github.com/unixfox/periodic-build-with-github-actions/blob/master/.github/workflows/docker-build-mailcow.yml
Inside the /opt/mailcow-dockerized
directory, you just need to paste this content inside the file docker-compose.override.yml
:
version: '2.4'
services:
unbound-mailcow:
image: quay.io/mailcowarm64/unbound
clamd-mailcow:
platform: linux/amd64
rspamd-mailcow:
#image: quay.io/mailcowarm64/rspamd #image patched from official dockerfile, uncomment if you want
platform: linux/amd64
php-fpm-mailcow:
image: quay.io/mailcowarm64/phpfpm
sogo-mailcow:
platform: linux/amd64
dovecot-mailcow:
platform: linux/amd64
postfix-mailcow:
image: quay.io/mailcowarm64/postfix
acme-mailcow:
image: quay.io/mailcowarm64/acme
netfilter-mailcow:
image: quay.io/mailcowarm64/netfilter
watchdog-mailcow:
image: quay.io/mailcowarm64/watchdog
dockerapi-mailcow:
image: quay.io/mailcowarm64/dockerapi
solr-mailcow:
image: quay.io/mailcowarm64/solr
olefy-mailcow:
image: quay.io/mailcowarm64/olefy
All the docker images are uploaded there: https://quay.io/organization/mailcowarm64
Do note that you need at least QEMU 6, on Debian bullseye (tested) you can get it with Debian backports then install it using apt-get install -t bullseye-backports qemu binfmt-support qemu-user-static
or use Ubuntu 22.04 (haven't tested).
And at least or higher version of docker-compose 1.21, on Debian bullseye: apt install --no-install-recommends -t bullseye-backports docker-compose
.
This way, this shouldn't break the update.sh mechanism of mailcow. I would highly not recommend doing that for production environment, at least with native Docker images for ARM64 you will have way less performance issue/slowdowns.
If anyone is interested, I'm maintaining up-to-date docker images of mailcow that are compatible on ARM64/ARMv8, I basically automated the build of https://github.com/mailcow/mailcow-dockerized/tree/master/data/Dockerfiles using GitHub actions: https://github.com/unixfox/periodic-build-with-github-actions/blob/master/.github/workflows/docker-build-mailcow.yml
Inside the
/opt/mailcow-dockerized
directory, you just need to paste this content inside the filedocker-compose.override.yml
:version: '2.4' services: unbound-mailcow: image: quay.io/mailcowarm64/unbound clamd-mailcow: platform: linux/amd64 rspamd-mailcow: platform: linux/amd64 php-fpm-mailcow: image: quay.io/mailcowarm64/phpfpm sogo-mailcow: platform: linux/amd64 dovecot-mailcow: platform: linux/amd64 postfix-mailcow: image: quay.io/mailcowarm64/postfix acme-mailcow: image: quay.io/mailcowarm64/acme netfilter-mailcow: image: quay.io/mailcowarm64/netfilter watchdog-mailcow: image: quay.io/mailcowarm64/watchdog dockerapi-mailcow: image: quay.io/mailcowarm64/dockerapi solr-mailcow: image: quay.io/mailcowarm64/solr olefy-mailcow: image: quay.io/mailcowarm64/olefy
All the docker images are uploaded there: https://quay.io/organization/mailcowarm64
Do note that you need at least QEMU 6, on Debian bullseye (tested) you can get it with Debian backports then install it using
apt-get install -t bullseye-backports qemu binfmt-support qemu-user-static
or use Ubuntu 22.04 (haven't tested). And at least or higher version of docker-compose 1.21, on Debian bullseye:apt install --no-install-recommends -t bullseye-backports docker-compose
.This way, this shouldn't break the update.sh mechanism of mailcow. I would highly not recommend doing that for production environment, at least with native Docker images for ARM64 you will have way less performance issue/slowdowns.
I was too lazy for that but... perfect, easy and convenient solution
Reopening this as i wanted to plan a possible mailcow: ARM Edition exclusively for ARM Devices (with the needed System Requirements of course).
Please let me know if anyone had a good idea so far (which i read here).
Reopening this as i wanted to plan a possible mailcow: ARM Edition exclusively for ARM Devices (with the needed System Requirements of course).
Please let me know if anyone had a good idea so far (which i read here).
Great! I think the major step forward would be to publish the Docker images that already work for ARM64 (see https://quay.io/organization/mailcowarm64 for the list except rspamd). An update of the current github workflow is needed for that: https://github.com/mailcow/mailcow-dockerized/blob/master/.github/workflows/image_builds.yml. You can build multi architecture images through docker buildx: https://www.docker.com/blog/multi-arch-build-and-images-the-simple-way/
The remaining Docker images that won't build out of the box on ARM64 are:
Some of these images could be easily be ported to ARM64 compatibility by using Ubuntu repositories, for some components like rspamd Ubuntu provides already built binaries for ARM64: https://packages.ubuntu.com/jammy/rspamd#pdownload
ClamAV, Dovecot and Rspamd are available for Alpine in ARM Versions.
So we can use them.
In general i would like to switch to Alpine based Images for ARM, as they are (at least what i expect) lightweight and more performant then the Debian/Ubuntu packages are.
SOGo does not. As this ARM Version of mailcow won't be a 1by1 copy of the mainline Project more a light version so to say. We could use Roundcube instead as a webmailer.
Unfortunately Roundcube does not have a DAV Part build in like SOGo did. So maybe we have to implement a seperate thing or even write a own thing for this.
In general i would like to switch to Alpine based Images for ARM, as they are (at least what i expect) lightweight and more performant then the Debian/Ubuntu packages are.
Totally agree. I'd rather see most images migrating to Alpine, as this would factorise the effort of testing/maintaining to a single image per service, and it would not hurt the x86 platform neither.
Unfortunately Roundcube does not have a DAV Part build in like SOGo did. So maybe we have to implement a seperate thing or even write a own thing for this.
Roundcube has a handful of extensions we could investigate. CardDav works pretty well for instance, I use this setup daily. But here again, we should consider the difficulty of maintaining an additional image (Roundcube + SoGo).
What about creating our own multiplatform SoGo images from sources? It is mostly GNUStep/Obj-C which compile on all platforms. As a matter of fact I explored this path long ago, but had no time to finish. Resource wise it was not so bad, compared to Roundcube which needs a webserver and php.
platform: linux/amd64
I reverted back to the emulated AMD64 package due to frequent:
2023-01-22 15:58:39 #48(controller) rspamd_crash_sig_handler: caught fatal signal 11(Segmentation fault), pid: 48, trace:
2023-01-22 15:58:39 #48(controller) rspamd_print_crash: 0: 0000FFFFB5A7FD2C:
Thank you, @unixfox !
I ran mailcow on the Oracle Cloud ARM Free Tier and it works, but sometimes .sh scripts running by ofelia on the dovecot container freeze and consume all CPU.
As a quick solution, I added timeout 10
before each script, but maybe there is a better solution?
ofelia.job-exec.dovecot_imapsync_runner.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/bin/timeout 20 /usr/local/bin/gosu nobody /usr/local/bin/imapsync_runner.pl || exit 0\""
ofelia.job-exec.dovecot_trim_logs.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/bin/timeout 20 /usr/local/bin/gosu vmail /usr/local/bin/trim_logs.sh || exit 0\""
ofelia.job-exec.dovecot_clean_q_aged.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/bin/timeout 20 /usr/local/bin/gosu vmail /usr/local/bin/clean_q_aged.sh || exit 0\""
ofelia.job-exec.dovecot_maildir_gc.command: "/bin/bash -c \"source /source_env.sh ; /usr/bin/timeout 20 /usr/local/bin/gosu vmail /usr/local/bin/maildir_gc.sh\""
ofelia.job-exec.dovecot_repl_health.command: "/bin/bash -c \"/usr/bin/timeout 20 /usr/local/bin/gosu vmail /usr/local/bin/repl_health.sh\""
ofelia.job-exec.dovecot_quarantine.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/bin/timeout 20 /usr/local/bin/gosu vmail /usr/local/bin/quarantine_notify.py || exit 0\""
Thank you, @unixfox !
I ran mailcow on the Oracle Cloud ARM Free Tier and it works, but sometimes .sh scripts running by ofelia on the dovecot container freeze and consume all CPU.
As a quick solution, I added
timeout 10
before each script, but maybe there is a better solution?ofelia.job-exec.dovecot_imapsync_runner.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/bin/timeout 20 /usr/local/bin/gosu nobody /usr/local/bin/imapsync_runner.pl || exit 0\"" ofelia.job-exec.dovecot_trim_logs.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/bin/timeout 20 /usr/local/bin/gosu vmail /usr/local/bin/trim_logs.sh || exit 0\"" ofelia.job-exec.dovecot_clean_q_aged.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/bin/timeout 20 /usr/local/bin/gosu vmail /usr/local/bin/clean_q_aged.sh || exit 0\"" ofelia.job-exec.dovecot_maildir_gc.command: "/bin/bash -c \"source /source_env.sh ; /usr/bin/timeout 20 /usr/local/bin/gosu vmail /usr/local/bin/maildir_gc.sh\"" ofelia.job-exec.dovecot_repl_health.command: "/bin/bash -c \"/usr/bin/timeout 20 /usr/local/bin/gosu vmail /usr/local/bin/repl_health.sh\"" ofelia.job-exec.dovecot_quarantine.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/bin/timeout 20 /usr/local/bin/gosu vmail /usr/local/bin/quarantine_notify.py || exit 0\""
Can confirm the same issue on OCI!
Thank you, @unixfox ! I ran mailcow on the Oracle Cloud ARM Free Tier and it works, but sometimes .sh scripts running by ofelia on the dovecot container freeze and consume all CPU. As a quick solution, I added
timeout 10
before each script, but maybe there is a better solution?ofelia.job-exec.dovecot_imapsync_runner.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/bin/timeout 20 /usr/local/bin/gosu nobody /usr/local/bin/imapsync_runner.pl || exit 0\"" ofelia.job-exec.dovecot_trim_logs.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/bin/timeout 20 /usr/local/bin/gosu vmail /usr/local/bin/trim_logs.sh || exit 0\"" ofelia.job-exec.dovecot_clean_q_aged.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/bin/timeout 20 /usr/local/bin/gosu vmail /usr/local/bin/clean_q_aged.sh || exit 0\"" ofelia.job-exec.dovecot_maildir_gc.command: "/bin/bash -c \"source /source_env.sh ; /usr/bin/timeout 20 /usr/local/bin/gosu vmail /usr/local/bin/maildir_gc.sh\"" ofelia.job-exec.dovecot_repl_health.command: "/bin/bash -c \"/usr/bin/timeout 20 /usr/local/bin/gosu vmail /usr/local/bin/repl_health.sh\"" ofelia.job-exec.dovecot_quarantine.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/bin/timeout 20 /usr/local/bin/gosu vmail /usr/local/bin/quarantine_notify.py || exit 0\""
Can confirm the same issue on OCI!
I confirm aswell, my current fix was to roll back to dovecot 2.3.19.1 via mailcow/dovecot:1.21 which still works fine. edit : Sogo is deactivated on my setup, so as mentionned by @vinogradovnet below, use mailcow/sogo:1.114 instead of mailcow/sogo:1.115
Thank you, @shoopea!
dovecot-mailcow:
platform: linux/amd64
image: mailcow/dovecot:1.21
This works for me also.
Another reason for official arm images ;)
Same problem after last upgrade. Right now with mailcow/sogo:1.115
image. Downgrade to mailcow/sogo:1.114
resolved problem.
sogo-mailcow:
platform: linux/amd64
image: mailcow/sogo:1.114
Both new dovecot and sogo images use GOSU_VERSION 1.16
, but working images use GOSU_VERSION 1.14
Maybe this is issue.
I downgraded to 1.21/1.114 after getting too many of those:
Out of memory: Killed process 2722 (ofelia) total-vm:12899740kB, anon-rss:11018228kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:21808kB oom_score_adj:0
SOGo
The issue with SoGo is a none issue according to my "intensive research"
ubuntu@vps-********:/opt/mailcow-dockerized# apt-cache search sogo-common
sogo-common - Scalable groupware server - common files
ubuntu@vps-********:/opt/mailcow-dockerized# uname -a
Linux vps-******** 5.15.0-1030-oracle #36-Ubuntu SMP Wed Feb 15 05:57:14 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux
For ARM-cpu on OCI: I have many of the issues described here and tried some of the solutions, e.g. downgrading Sogo and sogo-mailcow. But 4 of my containers keep restarting:
6235f150e0a5 mailcow/rspamd:1.92 "/docker-entrypoint.ā¦" 2 minutes ago Restarting (1) 17 seconds ago mailcowdockerized-rspamd-mailcow-1
9006e32e36c0 mailcow/dovecot:1.21 "/docker-entrypoint.ā¦" 2 minutes ago Restarting (1) 14 seconds ago mailcowdockerized-dovecot-mailcow-1
81b6ea77a80b mailcow/clamd:1.61 "/sbin/tini -g -- /cā¦" 2 minutes ago Restarting (1) 21 seconds ago mailcowdockerized-clamd-mailcow-1
269b4760a4ce mailcow/sogo:1.114 "/docker-entrypoint.ā¦" 2 minutes ago Restarting (1) 25 seconds ago mailcowdockerized-sogo-mailcow-1
Furthermore, before downgrading I also got the frequent _"rspamd_crash_sighandler: caught fatal signal 11(Segmentation fault), pid: 4"-problems. If I go to the https://(mailserver-IP)/SOGo/ I receive: "What is happening? Please do not stop the stack while we are initializing the database or do other preparations. What is happening? - Nginx cannot connect to an upstream server or other services are not ready yet. This is fine if mailcow was just installed or updated and can take a few minutes to complete."...
A bit from my logs:
mailcowdockerized-ofelia-mailcow-1 | 2023-03-26T15:05:04.02+02:00 common.go:121 ā¶ ERROR [Job "sogo_ealarms" (29c29659d8cb)] Finished in "19.00723ms", failed: true, skipped: false, error: error creating exec: API error (409): Container 269b4760a4ced7e353768970611553d20a4b0f4977ff59dfee0889a7e2a10bcc is restarting, wait until the container is running
mailcowdockerized-ofelia-mailcow-1 | 2023-03-26T15:05:04.031+02:00 common.go:121 ā¶ ERROR [Job "dovecot_imapsync_runner" (74ed07014ae2)] Finished in "25.214146ms", failed: true, skipped: false, error: error creating exec: API error (409): Container 9006e32e36c087f11476446ca876eee7ebdbd84d6198ce0ea0b4b04a2d7e0fc4 is restarting, wait until the container is running
mailcowdockerized-ofelia-mailcow-1 | 2023-03-26T15:05:04.032+02:00 common.go:121 ā¶ ERROR [Job "sogo_sessions" (387248c521d9)] Finished in "30.107493ms", failed: true, skipped: false, error: error creating exec: API error (409): Container 269b4760a4ced7e353768970611553d20a4b0f4977ff59dfee0889a7e2a10bcc is restarting, wait until the container is running
mailcowdockerized-ofelia-mailcow-1 | 2023-03-26T15:05:04.033+02:00 common.go:121 ā¶ ERROR [Job "dovecot_trim_logs" (9bdf2e558745)] Finished in "27.720881ms", failed: true, skipped: false, error: error creating exec: API error (409): Container 9006e32e36c087f11476446ca876eee7ebdbd84d6198ce0ea0b4b04a2d7e0fc4 is restarting, wait until the container is running
...
mailcowdockerized-rspamd-mailcow-1 | exec /docker-entrypoint.sh: exec format error
...
mailcowdockerized-clamd-mailcow-1 | exec /sbin/tini: exec format error
...
mailcowdockerized-sogo-mailcow-1 | exec /docker-entrypoint.sh: exec format error
...
mailcowdockerized-watchdog-mailcow-1 | CRITICAL - Socket timeout
...
mailcowdockerized-acme-mailcow-1 | ping: bad address 'dovecot'
...
mailcowdockerized-dovecot-mailcow-1 | exec /docker-entrypoint.sh: exec format error
I might have made mistakes, but don't feel this is really stable enough for running on ARM with OCI... I'm not sure what I'll do, but googled for an alternative and found e.g. https://github.com/manfromdownunder/mailserver-arm which I might try - also I've only tried master branch instead of nightly, so there a few options, but would prefer ARM-support worked more "straight-out-of-the-box"...
marfeljoergsen have you done apt-get install qemu binfmt-support qemu-user-static ?
@jebabin Oh, thanks a lot, I missed that part! It seems I had to do: apt install qemu-system-arm binfmt-support qemu-user-static
- This works much better, now my containers aren't restarting the whole time and the amount of error messages is much lower.
In my docker-compose.override.yml I've specified to use mailcow/sogo:1.114 and mailcow/dovecot:1.21. I've setup domain and added email, but if I try to access http://(mydomain.com)/SOGo I get "What is happening? Please do not stop the stack while we are initializing the database or do other preparations" - this might however be because I'm only testing so I haven't made any DNS-changes, hence mail.(mydomain).com doesn't point to my IP... hmm, I'll play more with it tomorrow and probably I should redirect my noob-questions to the forum at https://community.mailcow.email/ - thanks for now, this looks a lot better!
for some components like rspamd Ubuntu provides already built binaries for ARM64: https://packages.ubuntu.com/jammy/rspamd#pdownload
@unifox it should not be taken as a base, as the Rspamd package version that usual OS repos provide is critically old, and this is not only about Rspamd. In such cases need to build them from the source to desired architecture and pack them inside of the docker image. Same can be said about SOGo, but about clamav and dovecot - it really can be taken from OS repos. General problem with OS repos that it's not getting updates as it should sometimes, and because of it generally anyway it will end up in building anything from code which resource and time consuming.
What @dragoangel says. :)
Vsevo does also advises against it, these are non supported builds. You might want to ask him for support in his repo. I don't think he is working on it atm.
+1 for arm64 support. Been thinking about migrating my mailserver to Hetzner's new arm64 servers, as it costs nearly half of what I pay now.
+1, please introduce an official mailcow Package with arm64 Support.
+1, official support for arm64 would be like cheesecake without raisins
Hetzner introduced CAX servers (Ampere Altra which is ARM64) which now go for cheaper than their Intel and Amd servers and come with double the RAM. ARM64 support is a must in today's world.
+1 - thought about migrating to a Hetzner arm vps, and mailcow is basically the only thing holding me back.
I'll start on testing/building mailcow for ARM probably the next day on a hetzner ARM Server.
+1
RSPAMD + CLAMAV have been ported to ARM with minimal changes to the main Dockerfile so that we can keep it inside the main repo.
Regarding Dovecot is a problem right now... we actually have to compile it for ARM64 to make it usable. This works but i'm not sure if i feel happy about it.
SOGo the same. But i've opened up a ticket at Alinto (which you guys could upvote, would be nice btw: https://bugs.sogo.nu/view.php?id=5754) maybe they'll add a native ARM64 precompiled package in their repo if we make enough "noise" you know what i mean. However if not, we'll probably continue with the compiling route of those subcontainers which are not natively ARM64 compatible.
mailcow has been sucessfully ported to ARM64 without modifiying the general code base (except the Dockerfiles, but those work on x86_64 the same as they do on ARM64).
As a small bonus i've added a little architecture information to the status page which will be live with the first release of May 2023. (Screenshot below)
Now begins the testing phase.
Which i'll invite anyone to which if interested. I'm not sure if i want to integrate this into nightly already. If i've decided on how to continue i'll write it here.
Anyways: Hopefully i'll get the first testing versions out this week.
Thanks @DerLinkman, I tried your changes for arm support and I got everything to work fine except rspamd. Rspamd crash with a segment fault during startup
2023-05-03 16:16:03 #60(main) <6uyjnm>; cfg; rspamd_config_is_module_enabled: lua module rspamd_update is disabled in the configuration
2023-05-03 16:16:03 #60(main) <oxhd99>; map; rspamd_map_add: added map http://nginx:8081/settings.php
2023-05-03 16:16:03 #60(main) <6uyjnm>; cfg; rspamd_init_lua_filters: init lua module settings from /usr/share/rspamd/plugins/settings.lua; digest: 094d643b66
2023-05-03 16:16:03 #60(main) <6uyjnm>; lua; spamassassin.lua:1714: loading SA rules from /etc/rspamd/custom/sa-rules
Segmentation fault (core dumped)
I'm running on Oracle Cloud infrastructure and did not made any change to the rspamd conf in the data directory If anyone else is running on OCI, can you tell if you encounter the same issue ?
Did you've build the images by yourself? Which you have as I didn't published ARM images on docker hub.
Did you've build the images by yourself? Which you have as I didn't published ARM images on docker hub.
Yes i rebuilt all images from feat/arm64-cow Edit: Thanks to @unixfox, I did not notice you did not update the Dockerfile for rspamd, after replacing [arch=amd64] by [arch=arm64] in the Dockefile, it's working well
Like my comment in https://github.com/mailcow/mailcow-dockerized/issues/879#issuecomment-1037241696, I just published the test docker images from the PR https://github.com/mailcow/mailcow-dockerized/pull/5219.
The images are available under the docker tag arm64-cow-latest
and arm64-cow-COMMITID
. Automatically updated when a new commit is out. The images will be available for 3 months, probably enough to have the official support before that.
Link to the docker images: https://quay.io/organization/mailcowarm64
It's targeted towards enthusiasts that want to do some early testing.
rspamd doesn't seem to have an ARM64 docker image for it though, no new dockerfile images are available in the PR https://github.com/mailcow/mailcow-dockerized/pull/5219/files.
rspamd doesn't seem to have an ARM64 docker image for it though, no new dockerfile images are available in the PR https://github.com/mailcow/mailcow-dockerized/pull/5219/files.
You can remplace [arch=amd64] by [arch=arm64] in the Dockerfile and you will get rspamd working
I'm trying this out now. It's up and running on Raspberry Pi 4 8GB, alongside NextCloud, and I'm configuring my first domain.
sudo su
umask
# 0022 # <- Verify it is 0022
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
git checkout feat/arm64-cow
nano generate_config.sh // Commented out some git commands so it doesn't change away from this branch, maybe unnecessary
nano data/Dockerfiles/rspamd/Dockerfile // Replace [arch=amd64] with [arch=arm64]
nano docker-compose.override.yml // Paste in contents of #879
./generate_config.sh
nano mailcow.conf // Change ports etc.
docker compose pull
docker compose up -d
Thanks for all the work ye put in. I just bought a Pi this week to host a mailserver, and very luckily the ARM work was done moments before I started reading the documentation!
Thanks @DerLinkman, I tried your changes for arm support and I got everything to work fine except rspamd. Rspamd crash with a segment fault during startup
2023-05-03 16:16:03 #60(main) <6uyjnm>; cfg; rspamd_config_is_module_enabled: lua module rspamd_update is disabled in the configuration 2023-05-03 16:16:03 #60(main) <oxhd99>; map; rspamd_map_add: added map http://nginx:8081/settings.php 2023-05-03 16:16:03 #60(main) <6uyjnm>; cfg; rspamd_init_lua_filters: init lua module settings from /usr/share/rspamd/plugins/settings.lua; digest: 094d643b66 2023-05-03 16:16:03 #60(main) <6uyjnm>; lua; spamassassin.lua:1714: loading SA rules from /etc/rspamd/custom/sa-rules Segmentation fault (core dumped)
I'm running on Oracle Cloud infrastructure and did not made any change to the rspamd conf in the data directory If anyone else is running on OCI, can you tell if you encounter the same issue ?
Hi,
thanks to my colleague i was able to confirm this strange behaviour on Oracles Cloud Infrastructure.
I've personally build the images (and tested them) on a Hetzner ARM64 Server which worked flawlessly so far.
Can you give us more informations about your ARM64 VPS? Like CPU Cores, CPU Model (can be seen with lscpu), RAM Amount, Virtualisation Platform (can be seen with systemd-detect-virt)
OMG i'm so dumb sorry.... i missed the AMD64 Tag inside the Rspamd Image.... sorry guys fix is deployed...
Hey everyone i've published the official test images to docker hub.
As this is a testing phase i've also remapped the image versions inside the docker-compose.yml to arm64-dev instead of a version.
This change is made with the latest commit.
You can now try it out if you want. And yes if someone asks: RSPAMD is also running on ARM64 now without a change needed (thanks for the reminder guys).
Hey everyone i've published the official test images to docker hub.
As this is a testing phase i've also remapped the image versions inside the docker-compose.yml to arm64-dev instead of a version.
This change is made with the latest commit.
You can now try it out if you want. And yes if someone asks: RSPAMD is also running on ARM64 now without a change needed (thanks for the reminder guys).
image: mailcow/solr:dev
missing arm64-
Same here! Branch: feat/arm64-cow
docker compose pull
[+] Running 19/19 ā redis-mailcow Error 1.2s ā watchdog-mailcow Error 1.2s ā netfilter-mailcow Error 1.2s ā ofelia-mailcow Error 1.2s ā php-fpm-mailcow Error 1.2s ā mysql-mailcow Error 1.2s ā dovecot-mailcow Error 1.2s ā ipv6nat-mailcow Error 1.2s ā dockerapi-mailcow Error 1.2s ā nginx-mailcow Error 1.2s ā solr-mailcow Error 1.2s ā olefy-mailcow Error 1.2s ā postfix-mailcow Error 1.2s ā rspamd-mailcow Error 1.2s ā unbound-mailcow Error 1.2s ā clamd-mailcow Error 1.2s ā memcached-mailcow Error 1.2s ā sogo-mailcow Error 1.2s ā acme-mailcow Error 1.2s Error response from daemon: manifest for mailcow/solr:dev not found: manifest unknown: manifest unknown
It looks like in the docker-compose.yml the tag of Solr has to be set to arm64-dev. After that you can pull the images without problems.
Another error running the restore script. Seems like the backup image has no arm64 build yet.
Unable to find image 'mailcow/backup:latest' locally
latest: Pulling from mailcow/backup
docker: no matching manifest for linux/arm64/v8 in the manifest list entries.
See 'docker run --help'.
ef03e7eb35ed
0f6198c5e897
Unable to find image 'mailcow/backup:latest' locally
latest: Pulling from mailcow/backup
docker: no matching manifest for linux/arm64/v8 in the manifest list entries.
See 'docker run --help'.
0f6198c5e897
Another error running the restore script. Seems like the backup image has no arm64 build yet.
Unable to find image 'mailcow/backup:latest' locally latest: Pulling from mailcow/backup docker: no matching manifest for linux/arm64/v8 in the manifest list entries. See 'docker run --help'. ef03e7eb35ed 0f6198c5e897 Unable to find image 'mailcow/backup:latest' locally latest: Pulling from mailcow/backup docker: no matching manifest for linux/arm64/v8 in the manifest list entries. See 'docker run --help'. 0f6198c5e897
Yeah the backup and restore functionality has not been tested yet so that didn't work natively yet.
You can build that image by yourself though and use it that way.
Hey everyone i've published the official test images to docker hub. As this is a testing phase i've also remapped the image versions inside the docker-compose.yml to arm64-dev instead of a version. This change is made with the latest commit. You can now try it out if you want. And yes if someone asks: RSPAMD is also running on ARM64 now without a change needed (thanks for the reminder guys).
image: mailcow/solr:dev missing arm64-
Ah damn... we have to much containers... :)
Should be fixed now!
I have now started mailcow with docker compose up, however something does not seem to be working properly.
The dockerapi container is constantly restarting:
mailcowdockerized-dockerapi-mailcow-1 | Traceback (most recent call last):
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/client.py", line 214, in _retrieve_server_version
mailcowdockerized-dockerapi-mailcow-1 | return self.version(api_version=False)["ApiVersion"]
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/daemon.py", line 181, in version
mailcowdockerized-dockerapi-mailcow-1 | return self._result(self._get(url), json=True)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/utils/decorators.py", line 46, in inner
mailcowdockerized-dockerapi-mailcow-1 | return f(self, *args, **kwargs)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/client.py", line 237, in _get
mailcowdockerized-dockerapi-mailcow-1 | return self.get(url, **self._set_request_timeout(kwargs))
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 600, in get
mailcowdockerized-dockerapi-mailcow-1 | return self.request("GET", url, **kwargs)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 587, in request
mailcowdockerized-dockerapi-mailcow-1 | resp = self.send(prep, **send_kwargs)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 701, in send
mailcowdockerized-dockerapi-mailcow-1 | r = adapter.send(request, **kwargs)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/requests/adapters.py", line 486, in send
mailcowdockerized-dockerapi-mailcow-1 | resp = conn.urlopen(
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 790, in urlopen
mailcowdockerized-dockerapi-mailcow-1 | response = self._make_request(
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 496, in _make_request
mailcowdockerized-dockerapi-mailcow-1 | conn.request(
mailcowdockerized-dockerapi-mailcow-1 | TypeError: HTTPConnection.request() got an unexpected keyword argument 'chunked'
mailcowdockerized-dockerapi-mailcow-1 |
mailcowdockerized-dockerapi-mailcow-1 | During handling of the above exception, another exception occurred:
mailcowdockerized-dockerapi-mailcow-1 |
mailcowdockerized-dockerapi-mailcow-1 | Traceback (most recent call last):
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/bin/uvicorn", line 8, in <module>
mailcowdockerized-dockerapi-mailcow-1 | sys.exit(main())
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
mailcowdockerized-dockerapi-mailcow-1 | return self.main(*args, **kwargs)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/click/core.py", line 1055, in main
mailcowdockerized-dockerapi-mailcow-1 | rv = self.invoke(ctx)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
mailcowdockerized-dockerapi-mailcow-1 | return ctx.invoke(self.callback, **ctx.params)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/click/core.py", line 760, in invoke
mailcowdockerized-dockerapi-mailcow-1 | return __callback(*args, **kwargs)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/main.py", line 410, in main
mailcowdockerized-dockerapi-mailcow-1 | run(
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/main.py", line 578, in run
mailcowdockerized-dockerapi-mailcow-1 | server.run()
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/server.py", line 61, in run
mailcowdockerized-dockerapi-mailcow-1 | return asyncio.run(self.serve(sockets=sockets))
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run
mailcowdockerized-dockerapi-mailcow-1 | return loop.run_until_complete(main)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
mailcowdockerized-dockerapi-mailcow-1 | return future.result()
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/server.py", line 68, in serve
mailcowdockerized-dockerapi-mailcow-1 | config.load()
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/config.py", line 473, in load
mailcowdockerized-dockerapi-mailcow-1 | self.loaded_app = import_from_string(self.app)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/importer.py", line 21, in import_from_string
mailcowdockerized-dockerapi-mailcow-1 | module = importlib.import_module(module_str)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
mailcowdockerized-dockerapi-mailcow-1 | return _bootstrap._gcd_import(name[level:], package, level)
mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap_external>", line 883, in exec_module
mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
mailcowdockerized-dockerapi-mailcow-1 | File "/app/dockerapi.py", line 546, in <module>
mailcowdockerized-dockerapi-mailcow-1 | sync_docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock', version='auto')
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/client.py", line 45, in __init__
mailcowdockerized-dockerapi-mailcow-1 | self.api = APIClient(*args, **kwargs)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/client.py", line 197, in __init__
mailcowdockerized-dockerapi-mailcow-1 | self._version = self._retrieve_server_version()
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/client.py", line 221, in _retrieve_server_version
mailcowdockerized-dockerapi-mailcow-1 | raise DockerException(
mailcowdockerized-dockerapi-mailcow-1 | docker.errors.DockerException: Error while fetching server API version: HTTPConnection.request() got an unexpected keyword argument 'chunked'
mailcowdockerized-dockerapi-mailcow-1 exited with code 1
The dovecot container also reports the following since 10 minutes ago:
mailcowdockerized-dovecot-mailcow-1 | Waiting for versions table to be created...
And the Rspamd Container is reporting this:
mailcowdockerized-rspamd-mailcow-1 | Waiting for PHP on port 9001...
Am I doing something wrong? I specially created a fresh ARM64 instance at Hetzner and did a new installation.
I have now started mailcow with docker compose up, however something does not seem to be working properly.
The dockerapi container is constantly restarting:
mailcowdockerized-dockerapi-mailcow-1 | Traceback (most recent call last): mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/client.py", line 214, in _retrieve_server_version mailcowdockerized-dockerapi-mailcow-1 | return self.version(api_version=False)["ApiVersion"] mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/daemon.py", line 181, in version mailcowdockerized-dockerapi-mailcow-1 | return self._result(self._get(url), json=True) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/utils/decorators.py", line 46, in inner mailcowdockerized-dockerapi-mailcow-1 | return f(self, *args, **kwargs) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/client.py", line 237, in _get mailcowdockerized-dockerapi-mailcow-1 | return self.get(url, **self._set_request_timeout(kwargs)) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 600, in get mailcowdockerized-dockerapi-mailcow-1 | return self.request("GET", url, **kwargs) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 587, in request mailcowdockerized-dockerapi-mailcow-1 | resp = self.send(prep, **send_kwargs) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 701, in send mailcowdockerized-dockerapi-mailcow-1 | r = adapter.send(request, **kwargs) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/requests/adapters.py", line 486, in send mailcowdockerized-dockerapi-mailcow-1 | resp = conn.urlopen( mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 790, in urlopen mailcowdockerized-dockerapi-mailcow-1 | response = self._make_request( mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 496, in _make_request mailcowdockerized-dockerapi-mailcow-1 | conn.request( mailcowdockerized-dockerapi-mailcow-1 | TypeError: HTTPConnection.request() got an unexpected keyword argument 'chunked' mailcowdockerized-dockerapi-mailcow-1 | mailcowdockerized-dockerapi-mailcow-1 | During handling of the above exception, another exception occurred: mailcowdockerized-dockerapi-mailcow-1 | mailcowdockerized-dockerapi-mailcow-1 | Traceback (most recent call last): mailcowdockerized-dockerapi-mailcow-1 | File "/usr/bin/uvicorn", line 8, in <module> mailcowdockerized-dockerapi-mailcow-1 | sys.exit(main()) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/click/core.py", line 1130, in __call__ mailcowdockerized-dockerapi-mailcow-1 | return self.main(*args, **kwargs) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/click/core.py", line 1055, in main mailcowdockerized-dockerapi-mailcow-1 | rv = self.invoke(ctx) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/click/core.py", line 1404, in invoke mailcowdockerized-dockerapi-mailcow-1 | return ctx.invoke(self.callback, **ctx.params) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/click/core.py", line 760, in invoke mailcowdockerized-dockerapi-mailcow-1 | return __callback(*args, **kwargs) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/main.py", line 410, in main mailcowdockerized-dockerapi-mailcow-1 | run( mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/main.py", line 578, in run mailcowdockerized-dockerapi-mailcow-1 | server.run() mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/server.py", line 61, in run mailcowdockerized-dockerapi-mailcow-1 | return asyncio.run(self.serve(sockets=sockets)) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run mailcowdockerized-dockerapi-mailcow-1 | return loop.run_until_complete(main) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete mailcowdockerized-dockerapi-mailcow-1 | return future.result() mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/server.py", line 68, in serve mailcowdockerized-dockerapi-mailcow-1 | config.load() mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/config.py", line 473, in load mailcowdockerized-dockerapi-mailcow-1 | self.loaded_app = import_from_string(self.app) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/importer.py", line 21, in import_from_string mailcowdockerized-dockerapi-mailcow-1 | module = importlib.import_module(module_str) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module mailcowdockerized-dockerapi-mailcow-1 | return _bootstrap._gcd_import(name[level:], package, level) mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 1050, in _gcd_import mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 1027, in _find_and_load mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 688, in _load_unlocked mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap_external>", line 883, in exec_module mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed mailcowdockerized-dockerapi-mailcow-1 | File "/app/dockerapi.py", line 546, in <module> mailcowdockerized-dockerapi-mailcow-1 | sync_docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock', version='auto') mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/client.py", line 45, in __init__ mailcowdockerized-dockerapi-mailcow-1 | self.api = APIClient(*args, **kwargs) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/client.py", line 197, in __init__ mailcowdockerized-dockerapi-mailcow-1 | self._version = self._retrieve_server_version() mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/client.py", line 221, in _retrieve_server_version mailcowdockerized-dockerapi-mailcow-1 | raise DockerException( mailcowdockerized-dockerapi-mailcow-1 | docker.errors.DockerException: Error while fetching server API version: HTTPConnection.request() got an unexpected keyword argument 'chunked' mailcowdockerized-dockerapi-mailcow-1 exited with code 1
The dovecot container also reports the following since 10 minutes ago:
mailcowdockerized-dovecot-mailcow-1 | Waiting for versions table to be created...
And the Rspamd Container is reporting this:
mailcowdockerized-rspamd-mailcow-1 | Waiting for PHP on port 9001...
Am I doing something wrong? I specially created a fresh ARM64 instance at Hetzner and did a new installation.
I have exactly the same problem. (Hetzner Cloud, arm64, Ubuntu 22.04) I think the error is somewhere in the initialization of the database because (at least for me) there are no tables in the mailcow DB. But so far I could not determine exactly where the error happens.
Just tried to install Mailcow on my arm64 VPS in Hetzner's Cloud and I am facing the same problems as mentioned above with dockerapi
. Container keeps constantly restarting. In addition to dockerapi
, container sogo
seems to have some trouble, too.
mailcowdockerized-sogo-mailcow-1 | Waiting for schema update...
mailcowdockerized-sogo-mailcow-1 | ERROR 1146 (42S02) at line 1: Table 'mailcow.versions' doesn't exist
mailcowdockerized-dockerapi-mailcow-1 | -----
mailcowdockerized-dockerapi-mailcow-1 | Traceback (most recent call last):
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/client.py", line 214, in _retrieve_server_version
mailcowdockerized-dockerapi-mailcow-1 | return self.version(api_version=False)["ApiVersion"]
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/daemon.py", line 181, in version
mailcowdockerized-dockerapi-mailcow-1 | return self._result(self._get(url), json=True)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/utils/decorators.py", line 46, in inner
mailcowdockerized-dockerapi-mailcow-1 | return f(self, *args, **kwargs)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/client.py", line 237, in _get
mailcowdockerized-dockerapi-mailcow-1 | return self.get(url, **self._set_request_timeout(kwargs))
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 600, in get
mailcowdockerized-dockerapi-mailcow-1 | return self.request("GET", url, **kwargs)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 587, in request
mailcowdockerized-dockerapi-mailcow-1 | resp = self.send(prep, **send_kwargs)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 701, in send
mailcowdockerized-dockerapi-mailcow-1 | r = adapter.send(request, **kwargs)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/requests/adapters.py", line 486, in send
mailcowdockerized-dockerapi-mailcow-1 | resp = conn.urlopen(
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 790, in urlopen
mailcowdockerized-dockerapi-mailcow-1 | response = self._make_request(
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 496, in _make_request
mailcowdockerized-dockerapi-mailcow-1 | conn.request(
mailcowdockerized-dockerapi-mailcow-1 | TypeError: HTTPConnection.request() got an unexpected keyword argument 'chunked'
mailcowdockerized-dockerapi-mailcow-1 |
mailcowdockerized-dockerapi-mailcow-1 | During handling of the above exception, another exception occurred:
mailcowdockerized-dockerapi-mailcow-1 |
mailcowdockerized-dockerapi-mailcow-1 | Traceback (most recent call last):
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/bin/uvicorn", line 8, in <module>
mailcowdockerized-dockerapi-mailcow-1 | sys.exit(main())
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
mailcowdockerized-dockerapi-mailcow-1 | return self.main(*args, **kwargs)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/click/core.py", line 1055, in main
mailcowdockerized-dockerapi-mailcow-1 | rv = self.invoke(ctx)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
mailcowdockerized-dockerapi-mailcow-1 | return ctx.invoke(self.callback, **ctx.params)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/click/core.py", line 760, in invoke
mailcowdockerized-dockerapi-mailcow-1 | return __callback(*args, **kwargs)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/main.py", line 410, in main
mailcowdockerized-dockerapi-mailcow-1 | run(
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/main.py", line 578, in run
mailcowdockerized-dockerapi-mailcow-1 | server.run()
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/server.py", line 61, in run
mailcowdockerized-dockerapi-mailcow-1 | return asyncio.run(self.serve(sockets=sockets))
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run
mailcowdockerized-dockerapi-mailcow-1 | return loop.run_until_complete(main)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
mailcowdockerized-dockerapi-mailcow-1 | return future.result()
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/server.py", line 68, in serve
mailcowdockerized-dockerapi-mailcow-1 | config.load()
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/config.py", line 473, in load
mailcowdockerized-dockerapi-mailcow-1 | self.loaded_app = import_from_string(self.app)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/importer.py", line 21, in import_from_string
mailcowdockerized-dockerapi-mailcow-1 | module = importlib.import_module(module_str)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
mailcowdockerized-dockerapi-mailcow-1 | return _bootstrap._gcd_import(name[level:], package, level)
mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap_external>", line 883, in exec_module
mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
mailcowdockerized-dockerapi-mailcow-1 | File "/app/dockerapi.py", line 546, in <module>
mailcowdockerized-dockerapi-mailcow-1 | sync_docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock', version='auto')
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/client.py", line 45, in __init__
mailcowdockerized-dockerapi-mailcow-1 | self.api = APIClient(*args, **kwargs)
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/client.py", line 197, in __init__
mailcowdockerized-dockerapi-mailcow-1 | self._version = self._retrieve_server_version()
mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/client.py", line 221, in _retrieve_server_version
mailcowdockerized-dockerapi-mailcow-1 | raise DockerException(
mailcowdockerized-dockerapi-mailcow-1 | docker.errors.DockerException: Error while fetching server API version: HTTPConnection.request() got an unexpected keyword argument 'chunked'
mailcowdockerized-dockerapi-mailcow-1 exited with code 1
Yeah the backup and restore functionality has not been tested yet so that didn't work natively yet.
You can build that image by yourself though and use it that way.
That seems to be working fine afterwards, I just restored my small private mail server with 2 domains and ~15 mailboxes to an OCI Instance without issues.
Currently testing feat/arm64-cow https://github.com/mailcow/mailcow-dockerized/pull/5219/ at commit 57ba8036. At home on a Pi 4 8GB.
docker-compose.override.yml
version: '2.4'
services:
ipv6nat-mailcow:
image: bash:latest
restart: "no"
entrypoint: ["echo", "ipv6nat disabled in docker-compose.override.yml"]
clamd-mailcow:
image: bash:latest
restart: "no"
entrypoint: ["echo", "clamd disabled in docker-compose.override.yml"]
dockerapi-mailcow:
image: quay.io/mailcowarm64/dockerapi
mailcow.conf
...
SKIP_CLAMD=y
...
IPv6 is disabled because I don't have an IPv6 address. The other two changes were troubleshooting to get things up and running. I was getting a ~"please wait while we get started" screen that never changed (can't remember the exact wording). I disabled clamd because I saw it mentioned in the logs. Then I started swapping out images one by one with unixfox 's work until it booted properly.
Edit: turns out my ISP (Comcast) blocks port 25 by default, so I've hit a wall for now in testing. I have sending working via AWS SES. There is currently no indication of any problems. I'm optimistic I'll have this fully working soon. Solved: I signed up for dynu.com to forward emails to another port.
I have now started mailcow with docker compose up, however something does not seem to be working properly.
The dockerapi container is constantly restarting:
mailcowdockerized-dockerapi-mailcow-1 | Traceback (most recent call last): mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/client.py", line 214, in _retrieve_server_version mailcowdockerized-dockerapi-mailcow-1 | return self.version(api_version=False)["ApiVersion"] mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/daemon.py", line 181, in version mailcowdockerized-dockerapi-mailcow-1 | return self._result(self._get(url), json=True) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/utils/decorators.py", line 46, in inner mailcowdockerized-dockerapi-mailcow-1 | return f(self, *args, **kwargs) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/client.py", line 237, in _get mailcowdockerized-dockerapi-mailcow-1 | return self.get(url, **self._set_request_timeout(kwargs)) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 600, in get mailcowdockerized-dockerapi-mailcow-1 | return self.request("GET", url, **kwargs) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 587, in request mailcowdockerized-dockerapi-mailcow-1 | resp = self.send(prep, **send_kwargs) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 701, in send mailcowdockerized-dockerapi-mailcow-1 | r = adapter.send(request, **kwargs) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/requests/adapters.py", line 486, in send mailcowdockerized-dockerapi-mailcow-1 | resp = conn.urlopen( mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 790, in urlopen mailcowdockerized-dockerapi-mailcow-1 | response = self._make_request( mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 496, in _make_request mailcowdockerized-dockerapi-mailcow-1 | conn.request( mailcowdockerized-dockerapi-mailcow-1 | TypeError: HTTPConnection.request() got an unexpected keyword argument 'chunked' mailcowdockerized-dockerapi-mailcow-1 | mailcowdockerized-dockerapi-mailcow-1 | During handling of the above exception, another exception occurred: mailcowdockerized-dockerapi-mailcow-1 | mailcowdockerized-dockerapi-mailcow-1 | Traceback (most recent call last): mailcowdockerized-dockerapi-mailcow-1 | File "/usr/bin/uvicorn", line 8, in <module> mailcowdockerized-dockerapi-mailcow-1 | sys.exit(main()) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/click/core.py", line 1130, in __call__ mailcowdockerized-dockerapi-mailcow-1 | return self.main(*args, **kwargs) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/click/core.py", line 1055, in main mailcowdockerized-dockerapi-mailcow-1 | rv = self.invoke(ctx) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/click/core.py", line 1404, in invoke mailcowdockerized-dockerapi-mailcow-1 | return ctx.invoke(self.callback, **ctx.params) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/click/core.py", line 760, in invoke mailcowdockerized-dockerapi-mailcow-1 | return __callback(*args, **kwargs) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/main.py", line 410, in main mailcowdockerized-dockerapi-mailcow-1 | run( mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/main.py", line 578, in run mailcowdockerized-dockerapi-mailcow-1 | server.run() mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/server.py", line 61, in run mailcowdockerized-dockerapi-mailcow-1 | return asyncio.run(self.serve(sockets=sockets)) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run mailcowdockerized-dockerapi-mailcow-1 | return loop.run_until_complete(main) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete mailcowdockerized-dockerapi-mailcow-1 | return future.result() mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/server.py", line 68, in serve mailcowdockerized-dockerapi-mailcow-1 | config.load() mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/config.py", line 473, in load mailcowdockerized-dockerapi-mailcow-1 | self.loaded_app = import_from_string(self.app) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/uvicorn/importer.py", line 21, in import_from_string mailcowdockerized-dockerapi-mailcow-1 | module = importlib.import_module(module_str) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module mailcowdockerized-dockerapi-mailcow-1 | return _bootstrap._gcd_import(name[level:], package, level) mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 1050, in _gcd_import mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 1027, in _find_and_load mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 688, in _load_unlocked mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap_external>", line 883, in exec_module mailcowdockerized-dockerapi-mailcow-1 | File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed mailcowdockerized-dockerapi-mailcow-1 | File "/app/dockerapi.py", line 546, in <module> mailcowdockerized-dockerapi-mailcow-1 | sync_docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock', version='auto') mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/client.py", line 45, in __init__ mailcowdockerized-dockerapi-mailcow-1 | self.api = APIClient(*args, **kwargs) mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/client.py", line 197, in __init__ mailcowdockerized-dockerapi-mailcow-1 | self._version = self._retrieve_server_version() mailcowdockerized-dockerapi-mailcow-1 | File "/usr/lib/python3.10/site-packages/docker/api/client.py", line 221, in _retrieve_server_version mailcowdockerized-dockerapi-mailcow-1 | raise DockerException( mailcowdockerized-dockerapi-mailcow-1 | docker.errors.DockerException: Error while fetching server API version: HTTPConnection.request() got an unexpected keyword argument 'chunked' mailcowdockerized-dockerapi-mailcow-1 exited with code 1
The dovecot container also reports the following since 10 minutes ago:
mailcowdockerized-dovecot-mailcow-1 | Waiting for versions table to be created...
And the Rspamd Container is reporting this:
mailcowdockerized-rspamd-mailcow-1 | Waiting for PHP on port 9001...
Am I doing something wrong? I specially created a fresh ARM64 instance at Hetzner and did a new installation.
May not be a proper fix, but I fixed it by changing docker-compose.yml
file's dockerapi-mailcow's image value to quay.io/mailcowarm64/dockerapi
.
I am running Ubuntu 22.04 Minimal Image on OCI, Ampere Instance.
I have extensive experience with docker on arm, so before I get to work on this, has anyone got mailcow-dockerized ported or running on arm ?
Did a quick search through the repo and I do not see any references to arm.
Does the repo owner have any issues against arm support being added ?
Thanks