Ошибка при создании проекта стека Haskell с использованием docker-compose

Matteo Ugolotti спросил: 10 мая 2018 в 04:46 в: docker

Я запускаю новый проект Haskell с использованием стека, и я бы хотел его построить и запустить с помощью docker-compose, чтобы я мог его запустить с другими приложениями (db, балансировщик нагрузки и т. д.).

Однако мой проект стека не создается внутри контейнера. После запуска компоновки докеров я получаю эту ошибку

...
Step 6/8 : RUN stack build --dependencies-only ---> Running in 6d42f4797edd
Downloading lts-11.10 build plan ...
Downloaded lts-11.10 build plan.
AesonException "Error in $.packages.cassava.constraints.flags['bytestring--lt-0_10_4']: Invalid flag name: \"bytestring--lt-0_10_4\""
ERROR: Service 'be' failed to build: The command '/bin/sh -c stack build --dependencies-only' returned a non-zero code: 1

Моя структура проекта выглядит как

- README.md
- docker-compose.yml
/be
  - Dockerfile
  - /app
  - /src
  - be.cabal
  - stack.yaml
/fe
  - ...

My docker-compose.yml выглядит как

version: '3'
services:
    be:
        build: ./be
        image: be
        command: stack exec be
        ...
    fe:
      ...

My BE Dockerfile
FROM haskell:8.2
RUN mkdir -p /app/user
WORKDIR /app/user
COPY stack.yaml *.cabal ./RUN export PATH=$(stack path --local-bin):$PATH
RUN stack build --dependencies-onlyCOPY . /app/user
RUN stack install

My stack.yaml

resolver: lts-11.10
packages:

Мой .cabal

...
library
  hs-source-dirs:      src
  exposed-modules:     Lib
  build-depends:       base >= 4.7 && < 5
                       , aeson
  default-language:    Haskell2010executable be
  hs-source-dirs:      app
  main-is:             Main.hs
  ghc-options:         -threaded -rtsopts -with-rtsopts=-N
  build-depends:       base
                       , be
  default-language:    Haskell2010

Моя сборка стека отлично работает в локальном режиме, поэтому я думаю, что может быть что-то не так с изображением Haskell, которое я использую для контейнера Docker?

Любое предложение или помощь будут действительно оценены .


1 ответ

mgsloan ответил: 10 мая 2018 в 09:00

Это связано с ошибкой стека, которая исправлена ​​в более поздних версиях. Таким образом, я подозреваю, что изображение докеры имеет слишком старый вариант стека.

К сожалению, сопровождающий Cassava отказался объединить исправления, удаляя двойной дефис из имени флага. Howeve, г

Дополнительное видео по вопросу: Ошибка при создании проекта стека Haskell с использованием docker-compose

Слёрм-2. Docker, его устройство, Dockerfile, docker-compose

Dockerfile - что это? Первое знакомство | уроки docker | #4

Docker для начинающих. Алексей Попков, Yandex, Москва