0

requiero instalar npm install -g workbox-cli en mi proyecto pero me sale un error.

Set master image FROM php:7.4-fpm-alpine

Set working directory WORKDIR /var/www/html RUN chmod 777 /var/www/html

Install Additional dependencies

RUN apk update && apk add --no-cache \ build-base shadow vim curl
php7 \ php7-fpm \ php7-common \ php7-pdo \ php7-pdo_mysql
php7-mysqli \ php7-mcrypt \ php7-mbstring \ php7-xml \ php7-xmlrpc
php7-openssl \ php7-json \ php7-phar \ php7-zip \ php7-gd \ php7-dom
php7-sodium \ php7-session \ php7-zlib \ php7-redis \ libxml2-dev
imagemagick \ imagemagick-libs \ imagemagick-dev \ php7-imagick
php7-cli \ php7-imap \ php7-opcache
#php7-iconv \ freetype-dev \ libjpeg-turbo-dev \ libpng-dev \ && docker-php-ext-install soap sockets exif bcmath pdo_mysql pcntl \ && docker-php-ext-configure gd --with-jpeg --with-freetype \ && docker-php-ext-install -j$(nproc) gd

ADD https://raw.githubusercontent.com/mlocati/docker-php-extension- installer/master/install-php-extensions /usr/local/bin/

RUN chmod uga+x /usr/local/bin/install-php-extensions && sync &&
install-php-extensions imagick # Install intl extension RUN apk add --no-cache \ icu-dev \ && docker-php-ext-install -j$(nproc) intl \ && docker-php-ext-enable intl \ && rm -rf /tmp/*

Install mbstring extension RUN apk add --no-cache \ oniguruma-dev

\ && docker-php-ext-install mbstring \ && docker-php-ext-enable mbstring \ && rm -rf /tmp/*

INstall opcache, xdebug, redis, mongodb RUN apk add --no-cache \

$PHPIZE_DEPS \ openssl-dev

RUN pecl install -o -f redis RUN rm -rf /tmp/pear RUN docker-php-ext-enable redis

Add and Enable PHP-PDO Extenstions RUN docker-php-ext-install pdo

pdo_mysql mysqli RUN docker-php-ext-enable pdo_mysql

RUN apk add --no-cache zip libzip-dev RUN docker-php-ext-configure zip RUN docker-php-ext-install zip

RUN docker-php-ext-install exif RUN docker-php-ext-enable exif

RUN docker-php-ext-install bcmath RUN docker-php-ext-enable bcmath

#Git RUN apk update && apk upgrade && \ apk add --no-cache bash git openssh

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

#RUN pip install requests

Remove Cache RUN rm -rf /var/cache/apk/*

Add UID '1000' to www-data RUN usermod -u 1000 www-data

RUN apk add --update nodejs npm

Change current user to www USER www-data

Expose port 9000 and start php-fpm server EXPOSE 9000 CMD ["php-fpm"]

Mi error es el siguiente: introducir la descripción de la imagen aquí

1 respuesta 1

1

Hola como estas ? En principio aplica un mejor estilo para tu consulta. Para escribir un Dockerfile se escribe así:

# Set master image
FROM php:7.4-fpm-alpine
# Set working directory
WORKDIR /var/www/html
RUN chmod 777 /var/www/html
# Install Additional dependencies

RUN apk update && apk add --no-cache \
build-base shadow vim curl \
php7 \
php7-fpm \
php7-common \
php7-pdo \
php7-pdo_mysql \
php7-mysqli \
php7-mcrypt \
php7-mbstring \
php7-xml \
php7-xmlrpc \
php7-openssl \
php7-json \
php7-phar \
php7-zip \
php7-gd \
php7-dom \
php7-sodium \
php7-session \
php7-zlib \
php7-redis \
libxml2-dev \
imagemagick \
imagemagick-libs \
imagemagick-dev \
php7-imagick \
php7-cli \
php7-imap \
php7-opcache \
#php7-iconv \
freetype-dev \
libjpeg-turbo-dev \
libpng-dev \
&& docker-php-ext-install soap sockets exif bcmath pdo_mysql pcntl \
&& docker-php-ext-configure gd --with-jpeg --with-freetype \
&& docker-php-ext-install -j$(nproc) gd

ADD https://raw.githubusercontent.com/mlocati/docker-php-extension-installer/master/install-php-extensions /usr/local/bin/

RUN chmod uga+x /usr/local/bin/install-php-extensions && sync && \
    install-php-extensions imagick
    
#RUN printf "\n" | pecl install \
#imagick && \
#docker-php-ext-enable --ini-name 20-imagick.ini imagick

#RUN printf "\n" | pecl install \
#pcov && \
#docker-php-ext-enable pcov

  # Install intl extension
RUN apk add --no-cache \
icu-dev \
&& docker-php-ext-install -j$(nproc) intl \
&& docker-php-ext-enable intl \
&& rm -rf /tmp/*

  # Install mbstring extension
RUN apk add --no-cache \
oniguruma-dev \
&& docker-php-ext-install mbstring \
&& docker-php-ext-enable mbstring \
&& rm -rf /tmp/*

  # INstall opcache, xdebug, redis, mongodb
RUN apk add --no-cache \
$PHPIZE_DEPS \
openssl-dev

RUN pecl install -o -f redis
RUN rm -rf /tmp/pear
RUN docker-php-ext-enable redis

  # Add and Enable PHP-PDO Extenstions
RUN docker-php-ext-install pdo pdo_mysql mysqli
RUN docker-php-ext-enable pdo_mysql

RUN apk add --no-cache zip libzip-dev
RUN docker-php-ext-configure zip
RUN docker-php-ext-install zip

RUN docker-php-ext-install exif
RUN docker-php-ext-enable exif

RUN docker-php-ext-install bcmath
RUN docker-php-ext-enable bcmath

#Postgres
#RUN set -ex \
#&& apk --no-cache add \
#postgresql-dev

#RUN docker-php-ext-install pdo pdo_pgsql

#Git
RUN apk update && apk upgrade && \
apk add --no-cache bash git openssh

# Install PHP Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Remove Cache
RUN rm -rf /var/cache/apk/*

# Add UID '1000' to www-data
RUN usermod -u 1000 www-data

RUN apk add --update nodejs npm

#RUN install
# Copy existing application directory permissions
#COPY --chown=www-data:www-data . /var/www/html

# Change current user to www
USER www-data

# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm", "npm"]

Con respecto a tu problema. Al final de tu dockerfile decides usar el user www-data y cuando ejecutas npm install -g <dependencia> intenta guardar la dependencia global, haciendo que quiera guardarla en bin. Por lo tanto si no usas root siempre va a pasar lo mismo.

Te conviene agregar

RUN npm install -g workbox-cli

Antes de la línea que haces

# Change current user to www
USER www-data

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.