首页 > 解决方案 > Docker - Alpine Elixir 容器具有不可满足的约束

问题描述

我的 Phoenix 应用程序有这个Dockerfile。使用 Semaphore CI 运行促销时,我的部署失败并返回此错误:

ERROR: unsatisfiable constraints:
  libssl1.0 (missing):
    required by: world[libssl1.0]
  pdftk (missing):
    required by: world[pdftk]

这两个包怎么取不了?

标签: dockerelixiralpinesemaphore-ci

解决方案


用作 ( Dockerfile ) 基础的映像 ( Dockerfile )最近已从erlang:20-alpineAlpine 3.8更新到 3.9 ( Github commit )。elixir:1.6.6-alpine

Alpine 3.8 和 3.9 之间发生了以下变化:

  • libssl1.0软件包已被删除,并由libssl1.1.

  • pdftk软件包已在 3.9 中删除,并且仅在edge分支community存储库(和较旧的 Alpine 分支)中可用。

库:

这个很容易修复:只需将libssl1.0包替换为libssl1.1.

pdftk:

pdftk更有问题。它取决于libgcj6GCC 6 的 Java 运行时。但是,Java 运行时已从 GCC 8 及更高版本中完全删除。libgcj6是 GCC 6 的 Java 运行时,与 GCC 8 不兼容。安装libgcj6也会拉取 GCC 6 C++ 运行时,libstdc++6 (6.4.0-r9).

尝试与pdftk一起安装libgcj6,例如:

RUN apk add --no-cache libgcj6 pdftk --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community

失败:

ERROR: unsatisfiable constraints:
  so:libgcj.so.17 (missing):
    required by: pdftk-2.02-r1[so:libgcj.so.17]

不幸的是,我目前不熟悉解决方法。

这个问题有一张有效的开放 Alpine 票:https ://bugs.alpinelinux.org/issues/10136 ,所以值得留意可能的更新。


推荐阅读