Docker + старая версия Elixir/Phoenix

Меня попросили перенести приложение Elixir/Phoenix в Docker, с которым у меня не было опыта. Приложение использует не последние версии Elixir и Phoenix, поэтому мне пришлось отклониться от кода онлайн, который обычно фокусируется на последних версиях. Это привело меня к написанию этого Dockerfile

# FROM bitwalker/alpine-elixir:latest
FROM bitwalker/alpine-elixir:1.3.4
MAINTAINER Paul Schoenfelder <[email protected]>

# 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 .

Я получаю эту ошибку и задаюсь вопросом, как ее обойти? Отмечая «текущий» в заголовке, мне интересно, используется ли более старая версия 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]

person Simon H    schedule 29.07.2017    source источник


Ответы (1)


Это выглядит как bitwalker/alpine-elixir issue 5:

при использовании образов с тегами иногда может потребоваться явное обновление пакетов, поскольку установленные пакеты соответствуют версиям, обнаруженным при создании образа.
Обычно это так же просто, как добавить apk --update upgrade перед любой командой, устанавливающей пакеты.

Действительно, если сравнить старый Dockerfile на основе elixir 1.4.4 и последний, вы увидите обновление первым в последний:

apk --no-cache --update upgrade && \
apk add --no-cache --update --virtual .elixir-build \
...

Попробуйте добавить это в свой Dockerfile.

person VonC    schedule 29.07.2017