【问题标题】:'Error loading shared libraries: libgmp.so.10' while deploying Haskell web server to AWS Beanstalk using Docker使用 Docker 将 Haskell Web 服务器部署到 AWS Beanstalk 时出现“加载共享库时出错:libgmp.so.10”
【发布时间】:2020-10-20 06:18:05
【问题描述】:

我的 Dockerrun.aws.json 看起来像这样:

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "abcd/haskell-binary-image",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "6000"
    }
  ]
}

当我在 EB CLI 上运行 eb local run --port 6000 时,我收到以下错误:

latest: Pulling from abcd/haskell-binary-image
Digest: sha256:230d38fb8b3a8e95d538e5317982d6b85d12de5f02c3b07de369319766d657fc
Status: Image is up to date for abcd/haskell-binary-image:latest
docker.io/abcd/haskell-binary-image:latest
Sending build context to Docker daemon  4.608kB
Step 1/2 : FROM abcd/haskell-binary-image
 ---> b8d59f6eff42
Step 2/2 : EXPOSE 6000
 ---> Using cache
 ---> fcb117fc41f8
Successfully built fcb117fc41f8
/bin/image-exe: error while loading shared libraries: libgmp.so.10: cannot open shared object file: No such file or directory

当我使用 Web 客户端在 EB 上运行它时遇到了同样的问题。服务器在我的本地计算机上使用相同的 docker 映像运行,而不是在 Elastic Beanstalk 上运行。我的 Dockerfile 看起来像这样:

FROM fpco/stack-build:lts-15.16
ADD src src
ADD app app
FROM ubuntu:latest
RUN apt-get update && apt-get install -y \
  ca-certificates \
  libgmp-dev
ADD .stack-work/install/x86_64-linux-dkda49f7ca9b244180d3cfb1987cbc9743/219c4eef637de81431e864021af4dfc5a76fc6002e563868e1dfc24dcc774697/8.8.3/bin /bin/
EXPOSE 5000
ENTRYPOINT [ "/bin/image-exe" ]

编辑: 在二进制文件上运行 obj dump -p image-exe | grep NEEDED 会将以下内容列为共享库依赖项:

  NEEDED               libm.so.6
  NEEDED               libpthread.so.0
  NEEDED               librt.so.1
  NEEDED               libutil.so.1
  NEEDED               libdl.so.2
  NEEDED               libz.so.1
  NEEDED               libgmp.so.10
  NEEDED               libc.so.6

【问题讨论】:

  • 难道不是PATH
  • 你能提供你的 Dockerfile 的最小工作示例吗?我可以在我的 EB 环境上运行它来测试,但我不能这样做,因为我不知道 ADD .stack-work/install/ ... 是什么。
  • .stack-work/install/.... 链接到我在此容器中添加的 Haskell 程序中的可执行二进制文件。不知道如何在此处提供可以测试的示例。

标签: amazon-web-services docker haskell amazon-elastic-beanstalk


【解决方案1】:

/bin/image-exe 上运行ldd,这将为您提供图像中缺少的动态链接库,您需要将它们添加到您Dockerfile,但是我确实看到了,您已经添加了@987654325 @,但您可能缺少其他依赖项。

【讨论】:

  • 用二进制文件中的共享库列表更新了问题。此外,我可以使用docker run --publish 8000:5000 --detach --name cont_name haskell-binary-image 在本地计算机上运行 docker 映像
  • 我认为谷歌搜索现在可以解决问题,搜索每个包,看看每个包需要安装什么
  • libgmp.so.10(返回错误的那个)在libgmp-dev 包中找到。我现在认为它试图找到共享库的路径不正确。
  • 很多人都安装了libgmp10,所以你也可以试试
猜你喜欢
  • 2021-08-26
  • 1970-01-01
  • 2016-02-02
  • 2020-11-18
  • 2018-12-11
  • 2021-12-23
  • 2020-12-04
  • 2014-06-28
  • 2018-03-26
相关资源
最近更新 更多