簡體   English   中英

如何使用 sbt-native-packager 在 Docker 中生成可執行的二進制文件?

[英]How to make a binary file executable in Docker with sbt-native-packager?

我需要打包一個處理 REST API 調用的 Scala 應用程序,並在某些情況下在 Selenium WebDriver 的幫助下啟動 FireFox 瀏覽器。 我使用sbt-native-packager ,因為它既方便又簡單。 作為基礎鏡像,我使用自己的 Dockerfile:

# https://hub.docker.com/_/debian
FROM openjdk:8-jre-alpine3.9
ARG firefox_ver=70.0
ARG geckodriver_ver=0.26.0

# Download and install deps
RUN apk update && apk add curl curl-dev
# Download and install Firefox
RUN curl -fL -o /tmp/firefox.tar.bz2 https://ftp.mozilla.org/pub/firefox/releases/${firefox_ver}/linux-x86_64/en-GB/firefox-${firefox_ver}.tar.bz2 \
&& tar -xjf /tmp/firefox.tar.bz2 -C /tmp/ && mv /tmp/firefox /usr/local/bin/

# Download and install geckodriver
RUN curl -fL -o /tmp/geckodriver.tar.gz \
https://github.com/mozilla/geckodriver/releases/download/v${geckodriver_ver}/geckodriver-v${geckodriver_ver}-linux64.tar.gz \
&& tar -xzf /tmp/geckodriver.tar.gz -C /tmp/ && chmod +x /tmp/geckodriver && mv /tmp/geckodriver /usr/local/bin/

ENV PATH="/usr/local/bin/firefox:${PATH}"

然后在build.sbt我使用以下命令為firefox二進制文件提供適當的訪問級別:

...
dockerAdditionalPermissions += (DockerChmodType.UserGroupPlusExecute, "/usr/local/bin/firefox/firefox")
...

但不幸的是,當我連接到正在運行的 docker 容器並嘗試調用firefox ,我得到了這個:

/opt/docker $ firefox
sh: firefox: Permission denied

因此,Scala 應用程序也無法啟動 FireFox :(

這是firefox許可:

-rwxr-xr-x    1 root     root         14656 Oct 16 17:55 firefox

您似乎無法在 Alpine 上運行(此版本的)firefox:

# ldd firefox
    /lib64/ld-linux-x86-64.so.2 (0x7fcc15ef4000)
    libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7fcc15ef4000)
    libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x7fcc15ef4000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x7fcc15d9f000)
    libm.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7fcc15ef4000)
    libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x7fcc15d8b000)
    libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7fcc15ef4000)
Error relocating firefox: __fprintf_chk: symbol not found

這似乎是由 Alpine 基於 musl 而不是 GNU libc 引起的。


要解決這個問題,您可以使用 Alpine 本身提供的 firefox 包(但您仍然需要 geckodriver 才能工作)...或者,切換到非 alpine Docker 映像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM