Docker + Yesod链接失败

时间:2015-06-20 13:06:56

标签: haskell linker docker yesod dockerfile

我正在尝试制作Dockerized Yesod应用程序,并且已经在./my-app目录下初始化了Yesod项目。我的Dockerfile如下:

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"]

当我真正去运行docker时,它能够构建所有依赖项,但是我收到了一个链接器错误:

/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:latesthaskell:7.10尝试了此操作,但我仍然遇到了同样的错误。我不确定特定容器操作系统是否是Ubuntu。我很想听听有关此事的建议。

谢谢!

1 个答案:

答案 0 :(得分:1)

正如@MichaelSnoyman所说,摆弄堆栈并将yesod-static的cabal文件依赖关系更改为 #headerwrap { background: url(http://www.glitters20.com/wp-content/uploads/2012/11/Funny-Cow-37.gif) no-repeat center top; margin-top: -50px; padding-top:120px; text-align:center; background-attachment: relative; background-position: center center; min-height: 250px; width: 100%; /* -webkit-background-size: 100%; -moz-background-size: 100%; -o-background-size: 100%; background-size: 100%; */ -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover; } 得到容器构建。