alpine linux 输出错误“base64: unrecognized option: w”

Posted

技术标签:

【中文标题】alpine linux 输出错误“base64: unrecognized option: w”【英文标题】:The error “base64: unrecognized option: w” is output in alpine linux 【发布时间】:2020-01-15 03:24:58 【问题描述】:

在alpine linux上执行codecept -c src run acceptance命令时输出如下错误:

无 base64:无法识别的选项:w BusyBox v1.30.1 (2019-06-12 17:51:55 UTC) 多路调用二进制。

用法:base64 [-d] [文件]

Base64 编码或解码 FILE 到标准输出 -d 解码数据

我看不到 codecept 正在执行的命令。

我尝试在apk中添加base64,但是base64不存在。

Dockerfile:

FROM node:10-alpine AS node
FROM php:7.1-fpm-alpine

ENV GITHUB_OAUTH_TOKEN test
ENV COMPOSER_ASSET_VERSION 1.3.1
ENV DOCKERIZE_VERSION v0.6.1
ENV PATH=~/.composer/vendor/bin:$PATH

# install packages
RUN apk add -U --no-cache \
        curl-dev \
        libxml2-dev \
        libpng-dev \
        libjpeg-turbo-dev \
        zip \
        libzip-dev \
        unzip \
        gmp-dev \
        python \
        make \
        autoconf \
        memcached-dev \
        libmemcached-dev \
        libmcrypt-dev \
        icu-dev \
        g++

RUN pecl install xdebug \
                 memcached

# install PHP extensions
RUN docker-php-source extract \
    && cp /usr/src/php/ext/openssl/config0.m4 /usr/src/php/ext/openssl/config.m4
RUN docker-php-ext-configure gd --with-png-dir=/usr/include --with-jpeg-dir=/usr/include \
    && docker-php-ext-configure soap --enable-soap
RUN docker-php-ext-install \
    pdo \
    pdo_mysql \
    mysqli \
    mbstring \
    mcrypt \
    xml \
    intl \
    opcache \
    gd \
    soap \
    zip \
    && docker-php-ext-enable xdebug \
                             memcached

# install composer
RUN curl -sS https://getcomposer.org/installer | php \
    && mv composer.phar /usr/local/bin/composer

# install composer plugin
RUN composer global require hirak/prestissimo \
    && composer config --global github-oauth.github.com $GITHUB_OAUTH_TOKEN \
    && composer config -g repos.packagist composer https://packagist.jp \
    && composer global require fxp/composer-asset-plugin:^$COMPOSER_ASSET_VERSION

# install dockerize
#RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
    #    && tar -C /usr/local/bin -xzvf dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
    #&& rm dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz

# add node.js npm
COPY --from=node /usr/local /usr/local

RUN mkdir -p /project/test

WORKDIR /project/test

CMD ["php-fpm"]

#RUN rm /usr/local/bin/yarn /usr/local/bin/yarnpkg

【问题讨论】:

请提供您的 dockerfile 您确定您从codecept run 收到该错误吗?它看起来像 shell 命令的输出。 @LinPy 添加了 Dockerfile @Naktibalda 我看起来也是,但是 PHP 正在运行 【参考方案1】:

alpine 图像似乎具有不提供 -w 选项的 base64 版本:

docker container run -it --rm alpine:3.9 base64 --help
BusyBox v1.29.3 (2019-01-24 07:45:07 UTC) multi-call binary.

Usage: base64 [-d] [FILE]

Base64 encode or decode FILE to standard output
    -d  Decode data

但如果你执行apk add --update coreutils,它就在那里:

docker container run -it --rm alpine:3.9
/ # apk add --update coreutils
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
(1/3) Installing libattr (2.4.47-r7)
(2/3) Installing libacl (2.2.52-r5)
(3/3) Installing coreutils (8.30-r0)
Executing busybox-1.29.3-r10.trigger
OK: 7 MiB in 17 packages
/ # base64 --help
Usage: base64 [OPTION]... [FILE]
Base64 encode or decode FILE, or standard input, to standard output.

With no FILE, or when FILE is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
  -d, --decode          decode data
  -i, --ignore-garbage  when decoding, ignore non-alphabet characters
  -w, --wrap=COLS       wrap encoded lines after COLS character (default 76).
                          Use 0 to disable line wrapping

      --help     display this help and exit
      --version  output version information and exit

The data are encoded as described for the base64 alphabet in RFC 4648.
When decoding, the input may contain newlines in addition to the bytes of
the formal base64 alphabet.  Use --ignore-garbage to attempt to recover
from any other non-alphabet bytes in the encoded stream.

GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Report base64 translation bugs to <https://translationproject.org/team/>
Full documentation at: <https://www.gnu.org/software/coreutils/base64>
or available locally via: info '(coreutils) base64 invocation'

【讨论】:

【参考方案2】:

如果您要在 PHP 基础镜像之上安装完整的 C++ 工具链、Python 以及几个 C 库的开发文件,您最终会得到一个相当大的镜像。 (如果你按照@tgogos 的答案安装核心 Linux 系统工具的副本,甚至更大。)

与您正在安装的大量东西相比,您从 Alpine 与 Debian 基础映像节省的空间非常少。如果您将其更改为 Debian 基础,那么您将拥有这些工具的 GNU 版本提供的所有扩展。 (您还必须将 apk add 更改为 apt-get install 并找到相应的 Ubuntu 软件包名称,但在大多数情况下,它们非常相似。)我建议更改:

FROM php:7.1-fpm # not -alpine

【讨论】:

以上是关于alpine linux 输出错误“base64: unrecognized option: w”的主要内容,如果未能解决你的问题,请参考以下文章

Linux base64命令

Alpine Linux 上的 Rails ActiveSupport 时间和时区错误

Rod 在 Docker Alpine 中运行得到错误“chrome-linux/chrome:没有这样的文件或目录”

alpine-linux apk安装包命令集锦

在 alpine linux 上执行 mongodb 二进制文件

获取损坏的 Base64 编码图像