Докер + старая версия Elixir/Phoenix
Меня попросили перенести приложение Elixir/Phoenix в Docker, с которым у меня нет опыта работы. В приложении используются не самые последние версии Elixir и Phoenix, поэтому мне пришлось отклоняться от кода в Интернете, который обычно фокусируется на последних версиях. Это привело меня к написанию этого Dockerfile
# FROM bitwalker/alpine-elixir:latest
FROM bitwalker/alpine-elixir:1.3.4
MAINTAINER Paul Schoenfelder <paulschoenfelder@gmail.com>
# Important! Update this no-op ENV variable when this Dockerfile
# is updated with the current date. It will force refresh of all
# of the base images and things like `apt-get update` won't be using
# old cached versions when the Dockerfile is built.
ENV REFRESHED_AT=2017-07-26 \
# Set this so that CTRL+G works properly
TERM=xterm
# Install NPM
RUN \
mkdir -p /opt/app && \
chmod -R 777 /opt/app && \
apk update && \
apk --no-cache --update add \
git make g++ wget curl inotify-tools \
nodejs nodejs-current-npm && \
npm install npm -g --no-progress && \
update-ca-certificates --fresh && \
rm -rf /var/cache/apk/*
# Add local node module binaries to PATH
ENV PATH=./node_modules/.bin:$PATH \
HOME=/opt/app
# Install Hex+Rebar
RUN mix local.hex --force && \
mix local.rebar --force
WORKDIR /opt/app
CMD ["/bin/sh"]
<then it goes on to add some elixir depedencies>
На бегу
sudo docker build -t phoenix .
Я заканчиваю с этой ошибкой и задаюсь вопросом, как обойти это? Отмечая 'current' в названии, я задаюсь вопросом, используется ли более старая версия nodejs, и если да, то как это сделать? Помимо этого я открыт для любых предложений
ERROR: unsatisfiable constraints:
nodejs-current-npm (missing):
required by: world[nodejs-current-npm]
musl-1.1.14-r14:
breaks: musl-dev-1.1.14-r15[musl=1.1.14-r15]
1 ответ
Это похоже на выпуск 5 Bitwalker / Alpine-Elixir:
при использовании помеченных изображений иногда может потребоваться явное обновление пакетов, поскольку установленные пакеты соответствуют версиям, найденным при создании образа.
Как правило, это так же просто, как добавлениеapk --update upgrade
перед любыми командами, которые устанавливают пакеты.
Действительно, когда вы сравните старый Dockerfile на основе elixir 1.4.4 и последний, вы увидите первое обновление в последнем:
apk --no-cache --update upgrade && \
apk add --no-cache --update --virtual .elixir-build \
...
Попробуйте добавить это в свой Dockerfile.