Docker-mailserver: Build-Push-Action / Multiarch

Created on 15 Dec 2018  ·  50Comments  ·  Source: tomav/docker-mailserver

When starting the server, got standard_init_linux.go:190: exec user process caused "exec format error".

Context



Install docker and docker-compose on raspberry (OS raspbian), install and start the server

Expected Behavior


Should start

Actual Behavior


Not starting

Possible Fix

Your Environment

  • Amount of RAM available: 2GB
  • Mailserver version used: master
  • Docker version used: 18.09.0
  • Environment settings relevant to the config: Rasberry (arm) on raspbian
  • Any relevant stack traces ("Full trace" preferred):
standard_init_linux.go:190: exec user process caused "exec format error"
enhancement frozen due to age help wanted kubernetes priority 1 [HIGH] roadmap

Most helpful comment

For those that want something that "just works" on ARM, I put together learnings from this thread here: https://github.com/radicand/docker-mailserver and published an image. You can use radicand/docker-mailserver for the image name instead, but all the rest of the configuration should work as is. I'm running it in a K8s (k3s) cluster at the moment without issue.

All 50 comments

There is on #348 issue (closed). I personally have no arm devices so I don't know if it works. I assume you need to build your image yourself. On the docker hub it is only x86_64?

Yes it's what I found yesterday, browsing your issues. I started to do so, but seems to be quite complicated (especially for filebeat). I will dig a bit. You think it could be possible to add a arm version of your Dockerfile in the repo?

Sure why not? I don't have a setup or experience with it, but with some help we might get it to work

I succeeded (finaly) to make my rpi3 build your image. Here the modifications I did:

  1. Change the main image
FROM armv7/armhf-debian
  1. Build postsrsd from sources:
RUN apt-get -y install --no-install-recommends gcc make cmake libc6-dev
RUN \
  git clone https://github.com/roehling/postsrsd && \
  cd postsrsd && make && make install
  1. Build filebeat from sources (Golang):
RUN curl -O https://storage.googleapis.com/golang/go1.10.linux-armv6l.tar.gz
RUN tar -xvzf go1.10.linux-armv6l.tar.gz

ENV GOROOT=/go
ENV GOPATH=/tmp/go

RUN \
  /go/bin/go get github.com/elastic/beats/filebeat

RUN \
  cd $GOPATH/src/github.com/elastic/beats/filebeat && \
  GOARCH=arm /go/bin/go build
  1. Install dovecot not from backport:
RUN \
  apt-get -y install --no-install-recommends \
    dovecot-core \
    dovecot-imapd \
    dovecot-ldap \
    dovecot-lmtpd \
    dovecot-managesieved \
    dovecot-pop3d \
    dovecot-sieve

I'm not a devops, so it needs to be validated / tested. I don't have time anymore, I let someone more experienced finish the work :)

Nice work, could you provide your dockerfile so that we can add it?

I got sth like this (needs to be tested and validated by someone more experienced):

FROM armv7/armhf-debian
LABEL maintainer="Thomas VIAL"

ENV DEBIAN_FRONTEND noninteractive
ENV VIRUSMAILS_DELETE_DELAY=7
ENV ONE_DIR=0
ENV ENABLE_POSTGREY=0
ENV FETCHMAIL_POLL=300
ENV POSTGREY_DELAY=300
ENV POSTGREY_MAX_AGE=35
ENV POSTGREY_AUTO_WHITELIST_CLIENTS=5
ENV POSTGREY_TEXT="Delayed by postgrey"

ENV SASLAUTHD_MECHANISMS=pam
ENV SASLAUTHD_MECH_OPTIONS=""

ENV GOROOT=/go
ENV GOPATH=/tmp/go

# Packages
RUN apt-get update -q --fix-missing && \
  apt-get -y upgrade && \
  apt-get -y install postfix && \
  apt-get -y install --no-install-recommends \
    amavisd-new \
    arj \
    binutils \
    bzip2 \
    ca-certificates \
    cabextract \
    clamav \
    clamav-daemon \
    cmake \
    cpio \
    curl \
    ed \
    fail2ban \
    fetchmail \
    file \
    gamin \
    gcc \
    git \
    gzip \
    gnupg \
    iproute2 \
    iptables \
    locales \
    libc6-dev \
    liblz4-tool \
    libmail-spf-perl \
    libnet-dns-perl \
    libsasl2-modules \
    lrzip \
    lzop \
    make \
    netcat-openbsd \
    nomarch \
    opendkim \
    opendkim-tools \
    opendmarc \
    pax \
    pflogsumm \
    p7zip-full \
    postfix-ldap \
    postfix-pcre \
    postfix-policyd-spf-python \
    postsrsd \
    pyzor \
    razor \
    ripole \
    rpm2cpio \
    rsyslog \
    sasl2-bin \
    spamassassin \
    supervisor \
    postgrey \
    unrar-free \
    unzip \
    xz-utils \
    zoo \
    && \
  apt-get -y install --no-install-recommends \
    dovecot-core \
    dovecot-imapd \
    dovecot-ldap \
    dovecot-lmtpd \
    dovecot-managesieved \
    dovecot-pop3d \
    dovecot-sieve \
    && \
  apt-get autoclean && \
  rm -rf /var/lib/apt/lists/* && \
  rm -rf /usr/share/locale/* && \
  rm -rf /usr/share/man/* && \
  rm -rf /usr/share/doc/* && \
  touch /var/log/auth.log && \
  update-locale && \
  rm -f /etc/cron.weekly/fstrim && \
  rm -f /etc/postsrsd.secret

# Compile postsrsd
RUN \
  git clone https://github.com/roehling/postsrsd && \
  cd postsrsd && make && make install

# Compile filebeat
RUN \
  curl -O https://storage.googleapis.com/golang/go1.10.linux-armv6l.tar.gz && \
  tar -xvzf go1.10.linux-armv6l.tar.gz && \
  /go/bin/go get github.com/elastic/beats/filebeat && \
  cd $GOPATH/src/github.com/elastic/beats/filebeat && \
  GOARCH=arm /go/bin/go build

RUN echo "0 0,6,12,18 * * * /usr/bin/freshclam --quiet" > /etc/cron.d/clamav-freshclam && \
  chmod 644 /etc/clamav/freshclam.conf && \
  freshclam && \
  sed -i 's/Foreground false/Foreground true/g' /etc/clamav/clamd.conf && \
  sed -i 's/AllowSupplementaryGroups false/AllowSupplementaryGroups true/g' /etc/clamav/clamd.conf && \
  mkdir /var/run/clamav && \
  chown -R clamav:root /var/run/clamav

# Configures Dovecot
COPY target/dovecot/auth-passwdfile.inc target/dovecot/??-*.conf /etc/dovecot/conf.d/
RUN sed -i -e 's/include_try \/usr\/share\/dovecot\/protocols\.d/include_try \/etc\/dovecot\/protocols\.d/g' /etc/dovecot/dovecot.conf && \
  sed -i -e 's/#mail_plugins = \$mail_plugins/mail_plugins = \$mail_plugins sieve/g' /etc/dovecot/conf.d/15-lda.conf && \
  sed -i -e 's/^.*lda_mailbox_autocreate.*/lda_mailbox_autocreate = yes/g' /etc/dovecot/conf.d/15-lda.conf && \
  sed -i -e 's/^.*lda_mailbox_autosubscribe.*/lda_mailbox_autosubscribe = yes/g' /etc/dovecot/conf.d/15-lda.conf && \
  sed -i -e 's/^.*postmaster_address.*/postmaster_address = '${POSTMASTER_ADDRESS:="[email protected]"}'/g' /etc/dovecot/conf.d/15-lda.conf && \
  sed -i 's/#imap_idle_notify_interval = 2 mins/imap_idle_notify_interval = 29 mins/' /etc/dovecot/conf.d/20-imap.conf && \
  # stretch-backport of dovecot needs this folder
  mkdir /etc/dovecot/ssl && \
  chmod 755 /etc/dovecot/ssl  && \
  cd /usr/share/dovecot && \
  ./mkcert.sh  && \
  mkdir -p /usr/lib/dovecot/sieve-pipe /usr/lib/dovecot/sieve-filter /usr/lib/dovecot/sieve-global && \
  chmod 755 -R /usr/lib/dovecot/sieve-pipe /usr/lib/dovecot/sieve-filter /usr/lib/dovecot/sieve-global

# Configures LDAP
COPY target/dovecot/dovecot-ldap.conf.ext /etc/dovecot
COPY target/postfix/ldap-users.cf target/postfix/ldap-groups.cf target/postfix/ldap-aliases.cf target/postfix/ldap-domains.cf /etc/postfix/

# Enables Spamassassin CRON updates and update hook for supervisor
RUN sed -i -r 's/^(CRON)=0/\1=1/g' /etc/default/spamassassin && \
    sed -i -r 's/^\$INIT restart/supervisorctl restart amavis/g' /etc/spamassassin/sa-update-hooks.d/amavisd-new

# Enables Postgrey
COPY target/postgrey/postgrey /etc/default/postgrey
COPY target/postgrey/postgrey.init /etc/init.d/postgrey
RUN chmod 755 /etc/init.d/postgrey && \
  mkdir /var/run/postgrey && \
  chown postgrey:postgrey /var/run/postgrey

# Copy PostSRSd Config
COPY target/postsrsd/postsrsd /etc/default/postsrsd

# Enables Amavis
COPY target/amavis/conf.d/* /etc/amavis/conf.d/
RUN sed -i -r 's/#(@|   \\%)bypass/\1bypass/g' /etc/amavis/conf.d/15-content_filter_mode && \
  adduser clamav amavis && \
  adduser amavis clamav && \
  # no syslog user in debian compared to ubuntu
  adduser --system syslog && \
  useradd -u 5000 -d /home/docker -s /bin/bash -p $(echo docker | openssl passwd -1 -stdin) docker && \
  (echo "0 4 * * * /usr/local/bin/virus-wiper" ; crontab -l) | crontab -

# Configure Fail2ban
COPY target/fail2ban/jail.conf /etc/fail2ban/jail.conf
COPY target/fail2ban/filter.d/dovecot.conf /etc/fail2ban/filter.d/dovecot.conf
RUN echo "ignoreregex =" >> /etc/fail2ban/filter.d/postfix-sasl.conf && mkdir /var/run/fail2ban

# Enables Pyzor and Razor
USER amavis
RUN razor-admin -create && \
  razor-admin -register
USER root

# Configure DKIM (opendkim)
# DKIM config files
COPY target/opendkim/opendkim.conf /etc/opendkim.conf
COPY target/opendkim/default-opendkim /etc/default/opendkim

# Configure DMARC (opendmarc)
COPY target/opendmarc/opendmarc.conf /etc/opendmarc.conf
COPY target/opendmarc/default-opendmarc /etc/default/opendmarc
COPY target/opendmarc/ignore.hosts /etc/opendmarc/ignore.hosts

# Configure fetchmail
COPY target/fetchmail/fetchmailrc /etc/fetchmailrc_general
RUN sed -i 's/START_DAEMON=no/START_DAEMON=yes/g' /etc/default/fetchmail
RUN mkdir /var/run/fetchmail && chown fetchmail /var/run/fetchmail

# Configures Postfix
COPY target/postfix/main.cf target/postfix/master.cf /etc/postfix/
COPY target/postfix/header_checks.pcre target/postfix/sender_header_filter.pcre target/postfix/sender_login_maps.pcre /etc/postfix/maps/
RUN echo "" > /etc/aliases && \
  openssl dhparam -out /etc/postfix/dhparams.pem 2048 && \
  echo "@weekly FILE=`mktemp` ; openssl dhparam -out $FILE 2048 > /dev/null 2>&1 && mv -f $FILE /etc/postfix/dhparams.pem" > /etc/cron.d/dh2048


# Configuring Logs
RUN sed -i -r "/^#?compress/c\compress\ncopytruncate" /etc/logrotate.conf && \
  mkdir -p /var/log/mail && \
  chown syslog:root /var/log/mail && \
  touch /var/log/mail/clamav.log && \
  chown -R clamav:root /var/log/mail/clamav.log && \
  touch /var/log/mail/freshclam.log && \
  chown -R clamav:root /var/log/mail/freshclam.log && \
  sed -i -r 's|/var/log/mail|/var/log/mail/mail|g' /etc/rsyslog.conf && \
  sed -i -r 's|;auth,authpriv.none|;mail.none;mail.error;auth,authpriv.none|g' /etc/rsyslog.conf && \
  sed -i -r 's|LogFile /var/log/clamav/|LogFile /var/log/mail/|g' /etc/clamav/clamd.conf && \
  sed -i -r 's|UpdateLogFile /var/log/clamav/|UpdateLogFile /var/log/mail/|g' /etc/clamav/freshclam.conf && \
  sed -i -r 's|/var/log/clamav|/var/log/mail|g' /etc/logrotate.d/clamav-daemon && \
  sed -i -r 's|/var/log/clamav|/var/log/mail|g' /etc/logrotate.d/clamav-freshclam && \
  sed -i -r 's|/var/log/mail|/var/log/mail/mail|g' /etc/logrotate.d/rsyslog && \
  sed -i -r '/\/var\/log\/mail\/mail.log/d' /etc/logrotate.d/rsyslog && \
  # prevent syslog logrotate warnings \
  sed -i -e 's/\(printerror "could not determine current runlevel"\)/#\1/' /usr/sbin/invoke-rc.d && \
  sed -i -e 's/^\(POLICYHELPER=\).*/\1/' /usr/sbin/invoke-rc.d && \
  # prevent email when /sbin/init or init system is not existing \
  sed -i -e 's/invoke-rc.d rsyslog rotate > \/dev\/null/invoke-rc.d rsyslog --quiet rotate > \/dev\/null/g' /etc/logrotate.d/rsyslog

# Get LetsEncrypt signed certificate
RUN curl -s https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > /etc/ssl/certs/lets-encrypt-x3-cross-signed.pem

COPY ./target/bin /usr/local/bin
# Start-mailserver script
COPY ./target/check-for-changes.sh ./target/start-mailserver.sh ./target/fail2ban-wrapper.sh ./target/postfix-wrapper.sh ./target/postsrsd-wrapper.sh ./target/docker-configomat/configomat.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/*

# Configure supervisor
COPY target/supervisor/supervisord.conf /etc/supervisor/supervisord.conf
COPY target/supervisor/conf.d/* /etc/supervisor/conf.d/

EXPOSE 25 587 143 465 993 110 995 4190

CMD ["supervisord", "-c", "/etc/supervisor/supervisord.conf"]

ADD target/filebeat.yml.tmpl /etc/filebeat/filebeat.yml.tmpl

See mariadb-docker-armhf for inspiration.

.
├── Dockerfile
└── hooks
     ├── post_checkout
     └── pre_build

hooks/post_checkout

#!/bin/bash
# downloads a local copy of qemu on docker-hub build machines
curl -L https://github.com/balena-io/qemu/releases/download/v3.0.0%2Bresin/qemu-3.0.0+resin-arm.tar.gz | tar zxvf - -C . && mv qemu-3.0.0+resin-arm/qemu-arm-static .

hooks/pre_build

#!/bin/bash
# Register qemu-*-static for all supported processors except the 
# current one, but also remove all registered binfmt_misc before
docker run --rm --privileged multiarch/qemu-user-static:register --reset

Dockerfile

FROM arm32v7/debian:stretch-slim 
COPY qemu-arm-static /usr/bin
...

Is this going to be merged to main branch or not? Should I make those changes by myself?

couple of things... i also got this to eventually build by tweaking this arnhf Dockerfile slightly.

1) i had to build filebeat first and then COPY that into the final image.

----- Create a Docker for cross-compilation -----

mkdir build && cd $_
docker run -it --rm -v pwd:/build golang:1.8.3 /bin/bash

----- Inside docker -----

go get github.com/elastic/beats
cd /go/src/github.com/elastic/beats/filebeat/
git checkout v5.6.3
GOARCH=arm go build
cp filebeat /build
exit

2) i could not get that base image to play so i used straight DEBIAN instead. this installed all the packages without a hitch:

FROM debian ... replaces ... FROM armv7/armhf-debian

3) lastly you have do a full clone:

git clone --recurse-submodules https://github.com/tomav/docker-mailserver.git

i will be testing in due course.

any news?

update: ive been running the mailserver on a rpi4 now for few weeks without a single glitch. totally hassle free. The footprint on the hardware is minimal.

i initially tried on rpi3 x 3 docker swarm and it struggled with the shared storage and the permissions were just too much for my nooby mind.

but rpi4 is perfect for a small docker server.

update: ive been running the mailserver on a rpi4 now for few weeks without a single glitch. totally hassle free. The footprint on the hardware is minimal.

i initially tried on rpi3 x 3 docker swarm and it struggled with the shared storage and the permissions were just too much for my nooby mind.

but rpi4 is perfect for a small docker server.

Whould you mind to share your workaround? Maybe you have blog etc. than I can read.

Thanks

The steps are right there in my previous post.

  1. build filebeat first. you can do this with a docker cross compiler.
  2. i tweaked the docker file from @soywod to just 'debian' base image and swap the filebeat part to simply COPY into place your freshly built filebeat binary.
  3. On the PI, build the image ( dont build it on anything else or youll just make a headache for yourself. )
  4. done, just fire it up without the -d flag first to check for debug and errors. all other official guides and howtos apply.

i would suggest not using clamav to start with if youre not on rpi4. itll just slow things down.

once its running pull it down and then use the -d

if i get a moment this week ill do a step by step ;)

Cool, thank you. Step by step tutorial will be good for new comer.

Really cool all you guys~

Question if this is going into the main branch - can Travis build and test the ARM version? How do we know that new builds actually work? Personally I feel it would work best as a fork that merges changes from upstream with manual tests (or some CI engine that runs on ARM) before pushing. Alternative we could keep it here as a separate branch with the same kind of manual merge procedure. Automatically pushing all changes directly to the ARM image (i.e. building both from the same source) without reasonably high test coverage on both platforms feels dangerous.

Cool that it works though!

Travis could build for arm, but I have not yet played with that myself: https://dev.to/zeerorg/build-multi-arch-docker-images-on-travis-5428

FYI, you can use docker buildx for example to build the docker image for some other platforms:

git clone [email protected]:tomav/docker-mailserver.git
cd docker-mailserver
docker buildx build --platform linux/arm/v7,linux/arm64/v8 -f Dockerfile -t <your_scope>/docker-mailserver --push .

And so, check that everything works on your raspberry pi:

docker run <your_scope>/docker-mailserver /bin/sh 

Repeat it until docker images dependencies are satisfied with arm version you need (changing the image dependency name for the one you previously built and pushed on your scope).

To check platforms supported by a docker image, just run:

docker buildx imagetools inspect docker.io/<scope>/<name>:<version>

in example: docker buildx imagetools inspect docker.io/nginx


Documentation: https://docs.docker.com/buildx/working-with-buildx/

For those that want something that "just works" on ARM, I put together learnings from this thread here: https://github.com/radicand/docker-mailserver and published an image. You can use radicand/docker-mailserver for the image name instead, but all the rest of the configuration should work as is. I'm running it in a K8s (k3s) cluster at the moment without issue.

Where I should copy compiled filebeat? I'm new to docker and don't know where and how I should do this.

Where I should copy compiled filebeat? I'm new to docker and don't know where and how I should do this.

You need to read up basics on docker files. Building the the image will take the filebeat files from your host filesystem and move it into place in the docker image. this is done with the COPY function.

@ktcar214 note that filebeat will probably be moved out of the container in a coming release. You might as well run filebeat in another docker image. With that approach you can use a pre-built filebeat image. The official one does not support ARM, but there are bound to be others. See #1321.

Removing filebeat for running on raspberry is a good idea. Filebeat its a big problem if you want to run the original Docker file.

If i upgrade from stretch to buster (FROM debian:buster-slim) in the Docker file i get a problem with the software packages zoo and ripole. When i remove this packages, i can run the mail-server on Raspberry pi again.

Are the packages zoo and ripole required?

If i upgrade from stretch to buster (FROM debian:buster-slim)

I attempted this in my fork, but the dovecot version was an issue (possibly other versioning issues too, I can't recall) and the CE apt repo does not have arm support - something to check if you believe it works out of the box. I ended up staying with stretch and using the dovecot from stretch-backports.

My Dockerfile for reference: https://github.com/radicand/docker-mailserver/blob/master/Dockerfile

@bertovanoorspronk I'm also trying to upgrade to buster and ran into zoo and ripole. They are not really required, they are only used by amavis for analyzing e-mails. Nobody uses zoo archives anymore, but ripole is used to inspect Word documents. That would have been nice to have, but I can't find a replacement.

In short you can build the image without them, it works but it may be harder to detect viruses hidden in Word documents.

To update this thread, the new master based on Buster builds fine as-is now for arm64. I have been doing a custom ARM build for awhile, but now am building directly against master. I have issues building for ARMv7, but given that any modern RPi can enable a 64 bit kernel now, I'm satisfied with just building ARM64 only.

https://hub.docker.com/repository/docker/radicand/docker-mailserver/tags - the gha tag is the new mirrored build.

RPi 3 also capable to run 64 bit os by using Ubuntu server image, https://ubuntu.com/download/raspberry-pi

if youre building for arm64 and you get something like this at step 49

Step 49/56 : COPY ./target/helper_functions.sh ./target/check-for-changes.sh ./target/start-mailserver.sh ./target/fail2ban-wrapper.sh ./target/postfix-wrapper.sh ./target/postsrsd-wrapper.sh ./target/docker-configomat/configomat.sh /usr/local/bin/
COPY failed: stat /var/lib/docker/tmp/docker-builder254095452/target/docker-configomat/configomat.sh: no such file or directory

you need to make sure the /target/docker-configomat/configomat.sh script is present by doing a full clone and including linked files.

you can manually add this file to the target path and rebuild and it should work.

if youre building for arm64 and you get something like this at step 49

Step 49/56 : COPY ./target/helper_functions.sh ./target/check-for-changes.sh ./target/start-mailserver.sh ./target/fail2ban-wrapper.sh ./target/postfix-wrapper.sh ./target/postsrsd-wrapper.sh ./target/docker-configomat/configomat.sh /usr/local/bin/
COPY failed: stat /var/lib/docker/tmp/docker-builder254095452/target/docker-configomat/configomat.sh: no such file or directory

you need to make sure the /target/docker-configomat/configomat.sh script is present by doing a full clone and including linked files.

you can manually add this file to the target path and rebuild and it should work.

Ensuring you clone the submodules will resolve this.

Separately though, I think the conversation in this thread should shift to multi arch builds in the main build pipeline now, given it works with no changes.

Indeed, good work!

@radicand - thanks so much for the arm64 builds, works like magic...
Off topic but I notice you said you had this working in k3s? Any chance you could share your config?

@fergalmoran - here's my all-in-one deployment file: https://gist.github.com/radicand/9f5ccd4650479fe9a0a4b762ad1e6be9 - i've removed sensitive data and you'll need to replace values appropriately. HTH!

Thank you so much @radicand - HUGELY appreciated!

@erik-wramner , do you know if your build pipeline supports Docker buildx? If it's Docker 19.03 or higher, it should. If that's the case, if you can also confirm the build command is issued from the Makefile is what's used in your build/deploy pipeline, I can submit a PR to update the syntax to support arm64.

Travis seems to use Docker 18.06 on Ubuntu 16.04. I'm not 100% sure how the builds work. The tests run from the Makefile, but there could be another step that actually publishes to docker hub. There is nothing in the build logs about the publishing step. @fbartels or @tomav do you know?

The final image is built directly on the docker hub at https://github.com/tomav/docker-mailserver/blob/master/hooks/build. So buildx should be supported, afaik the hook needs to be extended for multiple architectures.

Its been quite a while since I had a closer look at the dockerfile, but i imagine that some of it would need to be updated for it as well.

@fbartels if there's a way to test this, it should work out of the box - I have been building without changes since the buster build using this buildx command: https://github.com/radicand/docker-mailserver/blob/master/.github/workflows/dockerimage.yml#L35-L41

ok, then is should be a matter of updating the build hook with the lines you have in your action. I don't think this can be tested however, since afair the hook is only triggered when something is pushed into the master branch.

@fbartels - I'll take it as an action to modify the hook on my fork and report back.

Unfortunately, DockerHub is on 18.03 (https://github.com/docker/hub-feedback/issues/1874#issuecomment-632602168) and does not support buildx, my suggestion is to switch from DockerHub-based builds and go with a GitHub action instead (see my repo link above) which will handle the build+push properly.

Is it possible to schedule regular builds (not triggered by a commit) with that solution as well? That has been on my wish list for quite some time.

Is it possible to schedule regular builds (not triggered by a commit) with that solution as well? That has been on my wish list for quite some time.

Yes, see here: https://github.com/radicand/docker-mailserver/blob/master/.github/workflows/sync-upstream.yml#L3-L5

Yes, it's totally possible.

@radicand's link is broken, so let me share mine: https://github.com/Tecnativa/doodba/blob/ab9c74d1650b27c4d8bfb26d14d203be1844547f/.github/workflows/ci.yaml#L64-L83

It has nothing to do with mail, but you see how secrets and images can be used to push both to docker hub and github docker registry.

You have a full ubuntu VM to do the build, so you can do whatever you want.

Some interesting details also:

Thanks for noting the broken link @Yajo - here's a link to the tree where cron and buildx are both present: https://github.com/radicand/docker-mailserver/tree/63a9ea44e3435ddfc68e1aaa7f98b41478f03d10/.github/workflows

@radicand: Thanks for the upgraded version to debian-buster. Works great on the raspberry. Thanks!
Why is the script ./target/docker-configomat/configomat.sh not included?
No problem, but i'm just curious. any idea?

@bertovanoorspronk it should be, I see it in my image. Are you using the :gha tag?

@radicand Great work!

EDIT: Nevermind. I'll just rename the issue.

This keeps getting easier :blush:

See https://github.com/docker/build-push-action/issues/36#issuecomment-685732033

Has the current project stalled or is there work in progress here?

This issue was closed due to one or more of the following reasons:

  1. Age
  2. Contributor inactivity
  3. The issue seems to be resolved

If you think this happened by accident, or feel like this issue was not actually resolved, please feel free to re-open it. If there is an issue you could resolve in the meantime, please open a PR based on the current master branch so we can review it.

Was this page helpful?
0 / 5 - 0 ratings