I’m trying to build Postgres Docker images for both amd64 & arm64 with a pre-populated database of AU addresses; using an M2 MacBook with Docker Engine 27.4.0.
When the build gets to the stage of running pg_restore
to load the data in both images; I get duplicated ID failures creating primary keys. These IDs are not duplicated in the dump files (they’re used by many users and I’ve loaded them myself without issue – FYI see https://github.com/minus34/gnaf-loader for info on the data itself)
I can only conclude the databases in the 2 images are interfering with each other, even though they should be running on their own internal port 5432.
Build code:
!/usr/bin/env bash
# 1. launch buildx
docker buildx create --name gnafloader_test_builder --use
docker buildx inspect --bootstrap
# 2. build images
docker buildx build --no-cache --platform linux/arm64,linux/amd64 --tag minus34/gnafloader_test:latest --tag minus34/gnafloader_test:202411 -f ${DOCKER_FOLDER}/Dockerfile . --load
Dockerfile excerpt:
FROM debian:bookworm-slim
# install Postgres with PostGIS
...
# copy and restore GNAF & Admin Boundary Postgres dump files
RUN mkdir -p /data
WORKDIR /data
ADD gnaf-202411.dmp .
ADD admin-bdys-202411.dmp .
RUN /etc/init.d/postgresql start
&& pg_restore -Fc -d postgres -h 127.0.0.1 -p 5432 -U postgres /data/gnaf-202411.dmp
&& /etc/init.d/postgresql stop
&& rm /data/gnaf-202411.dmp
RUN /etc/init.d/postgresql start
&& pg_restore -Fc -d postgres -h 127.0.0.1 -p 5432 -U postgres /data/admin-bdys-202411.dmp
&& /etc/init.d/postgresql stop
&& rm /data/admin-bdys-202411.dmp
# enable external access to postgres - WARNING: these are insecure settings! Edit these to restrict access
RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/16/main/pg_hba.conf
RUN echo "listen_addresses='*'" >> /etc/postgresql/16/main/postgresql.conf
EXPOSE 5432
# set user for postgres startup
USER postgres
# Start postgres when starting the container
CMD ["/usr/lib/postgresql/16/bin/postgres", "-D", "/var/lib/postgresql/16/main", "-c", "config_file=/etc/postgresql/16/main/postgresql.conf"]
Is there any way to avoid this using Docker BuildX or should I try Podman?