Многоступенчатая сборка Heroku Container не может найти файл - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть файл Docker с двумя этапами, который успешно строится локально.Когда я пытаюсь отправить его в контейнерную службу heroku, он не может скомпилировать с ошибкой, что файл недоступен.

Ошибка

** (Mix.Config.LoadError) could not load config config/prod.exs
    ** (ArgumentError) argument error
    :erlang.binary_to_integer("")
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
    (stdlib) erl_eval.erl:878: :erl_eval.expr_list/6
    (stdlib) erl_eval.erl:236: :erl_eval.expr/5

Dockerfile

FROM bitwalker/alpine-elixir-phoenix:1.5.2 as builder

ARG CLOAK_ENCRYPTION_KEY
ARG DATABASE_URL


ENV MIX_ENV=prod PORT=$PORT DATABASE_URL=$DATABASE_URL CLOAK_ENCRYPTION_KEY=$CLOAK_ENCRYPTION_KEY

WORKDIR /app

# Cache elixir deps
ADD mix.exs mix.lock /app/
RUN mix do deps.get, deps.compile

# Same with npm deps
ADD client/package.json client/package-lock.json /app/client/
RUN cd client && \
    npm install

ADD . .

# Run frontend build, compile, and digest assets
RUN cd /app/client/ && \
    npm run build && \
    cd /app && \
    mix do compile

RUN MIX_ENV=prod mix release --env=prod --verbose --no-tar

### Release

FROM alpine:3.8

# We need bash and openssl for Phoenix
RUN apk upgrade --no-cache && \
    apk add --no-cache bash openssl

ENV SHELL=/bin/bash

COPY --from=builder /app/_build/prod/rel/myapp/app

ENTRYPOINT ["/app/bin/myapp"]

CMD ["foreground"]

Ошибка возникает в секунду mix do compile

Что заставляет это работать локально, но не работает на Heroku?

1 Ответ

0 голосов
/ 26 ноября 2018

Разобрался.Выполняя толчок heroku, я использовал параметр --arg для каждого аргумента (Docker --build-arg равен 1 к 1).Heroku на самом деле хочет только один --arg со всеми аргументами, соединенными запятой.

Эквивалентный герой

docker build -t myapp --build-arg DATABASE_URL=someurl --build-arg CLOAK_ENCRYPTION_KEY=somekey 

равен

heroku container:push web --arg DATABASE_URL=someurl,CLOAK_ENCRYPTION_KEY=somekey
...