Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update of 24 base image is a braking change #380

Open
kaaboaye opened this issue Dec 20, 2021 · 3 comments
Open

Update of 24 base image is a braking change #380

kaaboaye opened this issue Dec 20, 2021 · 3 comments

Comments

@kaaboaye
Copy link

After changing the base image of erlang:24 from buildpack-deps:buster to buildpack-deps:bullseye it transitively introduced a braking change to elixir:* images which use erlang:24.

Referring to this commit f14a791cec08903d5ac34a562861bae675cf2ff8 by @getong

There is a feature in Elixir called releases https://hexdocs.pm/mix/1.12/Mix.Tasks.Release.html which are creating a stand alone bundle which can be easily deployed to the production servers.

However for this bundle to work both build-time and run-time OS have to have exactly the same version.

So changing the underlying OS version effectively forces everyone using mix.release with separated build-time and run-time environments to upgrade their run-time OS with 0 time notice.

This is how image build with buildpack-deps:bullseye and deployed with debian:buster looks like.

/app/erts-12.2/bin/beam.smp: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /app/erts-12.2/bin/beam.smp)
@garazdawi
Copy link
Contributor

I think the solution for you is to not use the erlang:24 tag as it is a mutable tag. If you want to have a stable tag you should use a specific version, such as 24.1.7.

If you use a mutable tag this type of problem is bound to pop up whenever a change to the base OS is made. The hexpm team has taken this one step further and provide a bunch of pinned OS/Erlang/Elixir versions for docker.

@kaaboaye
Copy link
Author

kaaboaye commented Dec 20, 2021

I think the solution for you is to not use the erlang:24 tag as it is a mutable tag. If you want to have a stable tag you should use a specific version, such as 24.1.7.

I partially agree but it's still erlang:24 not erlang:latest and having sem-ver in mind I would expect no breaking changes with major release locked. Sure it's erlang version not os version but the entire point of docker is to not have think about underlying os.

Here we're entering into elixir territory but as far I'm aware at least part of contributors maintain both images so I'll continue the thread here.

Locking into specific erlang version is not possible when using elixir tag. In my Dockerfile I've specified FROM elixir:1.12.3 which should lock on exact docker image without possibility of such change but since elixir:12.* have all specified erlang:24 as it's base it got rebuild with up different underlying os.

Interesting is fact that previous Elixir versions still have buster as it's base.

➜  ~ docker run -it --rm --entrypoint /bin/cat elixir:1.12.2 /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
➜  ~ docker run -it --rm --entrypoint /bin/cat elixir:1.12.3 /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

If you use a mutable tag this type of problem is bound to pop up whenever a change to the base OS is made. The hexpm team has taken this one step further and provide a bunch of pinned OS/Erlang/Elixir versions for docker.

This is a good solution but it would be great if I could rely on official images not being breaking changed in the friday afternoon.

@tsloughter
Copy link
Contributor

There is no semver here. Docker tags are mutable and images are kept up to date. It is a must that users not rely on these mutable tags for production, a copy should be made, or at the very least the full docker ref be used instead of the tag.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants