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

The error “base64: unrecognized option: w” is output in alpine linux

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

none base64: unrecognized option: w BusyBox v1.30.1 (2019-06-12 17:51:55 UTC) multi-call binary.

Usage: base64 [-d] [FILE]

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

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

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

Docker 文件:

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

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'

如果您要安装完整的 C++ 工具链,以及 Python,以及几个 C 库的开发文件,所有这些都位于 PHP 基础映像之上,您将得到一个相当大的图像。 (如果你接受@tgogos 的回答并安装核心 Linux 系统工具的副本,甚至更大。)

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

FROM php:7.1-fpm # not -alpine