2015-06-20 2 views
1

Я пытаюсь сделать приложение Dockerized Yesod, и я инициализировал проект Yesod под каталогом ./my-app. Мой Dockerfile выглядит следующим образом:Docker + Yesod Linking Failure

FROM haskell:7.8 

RUN apt-get update && apt-get install -y libpq5 libpq-dev 
RUN cabal update 

ADD my-app /opt/my-app 

WORKDIR /opt/my-app 

RUN cabal sandbox delete 
RUN cabal sandbox init 
RUN cabal install -j --only-dependencies 
RUN cabal build 

RUN dist/build/db-import/db-import 

EXPOSE 3000 

CMD ["dist/build/my-app/my-app", "production", "-p", "3000"] 

Когда я на самом деле пойти работать докер, это возможность построить все зависимости, но я получаю сообщение об ошибке компоновщика:

/opt/my-app/.cabal-sandbox/lib/x86_64-linux-ghc-7.8.4/cryptonite-0.3/libHScryptonite-0.3.a(generic.o):(.data+0x0): multiple definition of `gmtab' 
/opt/my-app/.cabal-sandbox/lib/x86_64-linux-ghc-7.8.4/cipher-aes-0.2.10/libHScipher-aes-0.2.10.a(aes_generic.o):(.data+0x0): first defined here 
collect2: error: ld returned 1 exit status 

Я не совсем уверен, что здесь, потому что я пробовал это с haskell:latest и haskell:7.10, но я все равно получаю ту же ошибку. Я не уверен, является ли это тот факт, что конкретная контейнерная ОС - Ubuntu или нет. Я хотел бы услышать предложения по этому вопросу.

Спасибо!

+1

Это не похоже на проблему докера. Это похоже на то, что две библиотеки, которые вы пытаетесь использовать, предоставляют один и тот же символ. – larsks

+0

Спасибо larsks. Я фактически запускал 'cabal build' в самом проекте без Dockerfile, и он отлично строится. Я не получаю эту ошибку связи, которую я получаю при использовании Dockerfile. – adilipan

+0

Я довольно уверен, что @larsks прав, а cabal просто выбирает разные версии библиотек. Я бы рекомендовал использовать снимок Stackage (или создать со стек). –

ответ

1

Как сказал @MichaelSnoyman, возившись со штабелем и изменяя зависимость файла cabal от yesod-static до == 1.5.0, получил контейнер для сборки.

 Смежные вопросы

  • Нет связанных вопросов^_^