Docker - Alpine Elixir 容器具有不可满足的约束

Docker - Alpine Elixir container has unsatisfiable constraints

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

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

这两个包怎么抓不到?

erlang:20-alpine 图像(Dockerfile), which is used as base for elixir:1.6.6-alpine (Dockerfile), has been recently updated from Alpine 3.8 to 3.9 (Github commit)。

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

  • libssl1.0 包已被删除,并被 libssl1.1 取代。

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

libssl:

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

pdftk:

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

尝试安装 pdftklibgcj6,例如:

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,因此值得关注可能的更新。