Laravel Mix в Docker: ETXTBSY: текстовый файл занят - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь запустить Laravel Mix на моем контейнере Docker.

Мне удалось установить последние версии npm и узла (спасибо Laradock).

Теперь, когда я пытаюсь запустить npm install, я получаю много таких:

npm WARN rollback Rolling back express@4.16.3 failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/srv/app/node_modules/express/package.json.3619593601' npm WARN rollback Rolling back array-flatten@1.1.1 failed (this is probably harmless): ETXTBSY: text file is busy, unlink '/srv/app/node_modules/express/node_modules/array-fla tten/package.json.2934324270'

узел: v10.5.0

НПМ: v6.1.0

Хост Windows.

Гость: Linux 2369f4b16e52 4.9.93-boot2docker # 1 SMP четверг, 10 мая 16:27:54 UTC 2018 x86_64 GNU / Linux

Dockerfile:

# this is the DEV/LOCAL dockerfile (default)
FROM php:7.2-apache


COPY apache/vhost.conf /etc/apache2/sites-available/000-default.conf

# Get an update, install some bits
RUN apt-get -yqq update \
    && apt-get -yqq install --no-install-recommends apt-utils unzip libzip-dev

RUN docker-php-ext-install pdo_mysql opcache zip \
    && a2enmod rewrite negotiation

ARG DOCKER_ENV=${DOCKER_ENV}

#if we are in dev, we need xdebug

RUN if [ ${DOCKER_ENV} = local ] || [ ${DOCKER_ENV} = dev ] || [ ${DOCKER_ENV} = development ]; then \
        pecl install xdebug-2.6.0 \
        && docker-php-ext-enable xdebug \
    ; fi

#copy our php.ini over and the composer details
COPY php/*.ini /usr/local/etc/php/conf.d/
COPY composer/composer-install.sh /tmp/composer-installer.sh

WORKDIR /tmp

#if we are in dev, run the Composer install
RUN if [ ${DOCKER_ENV} = local ] || [ ${DOCKER_ENV} = dev ] || [ ${DOCKER_ENV} = development ]; then \
        apt-get -yqq install --no-install-recommends git \
        && chmod +x composer-installer.sh \
        && ./composer-installer.sh \
        && mv composer.phar /usr/local/bin/composer \
        && chmod +x /usr/local/bin/composer \
        && su -l www-data -s /bin/sh -c "composer --version" \
    ; fi


#Need these for Laravel Mix (compiling assets) - stolen from Laradock

###########################################################################
# Node / NVM:
###########################################################################

# Check if NVM needs to be installed
ARG NODE_VERSION=stable
ENV NODE_VERSION ${NODE_VERSION}
ARG INSTALL_NODE=true
ARG INSTALL_NPM_GULP=true
ARG INSTALL_NPM_BOWER=true
ARG INSTALL_NPM_VUE_CLI=true
ARG NPM_REGISTRY
ENV NPM_REGISTRY ${NPM_REGISTRY}
ENV NVM_DIR ${PROJECT_PATH}/.nvm

RUN if [ ${INSTALL_NODE} = true ]; then \
    # Install nvm (A Node Version Manager)
    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash \
        && . $NVM_DIR/nvm.sh \
        && nvm install ${NODE_VERSION} \
        && nvm use ${NODE_VERSION} \
        && nvm alias ${NODE_VERSION} \
        && if [ ${NPM_REGISTRY} ]; then \
        npm config set registry ${NPM_REGISTRY} \
        ;fi \
        && if [ ${INSTALL_NPM_GULP} = true ]; then \
        npm install -g gulp \
        ;fi \
        && if [ ${INSTALL_NPM_BOWER} = true ]; then \
        npm install -g bower \
        ;fi \
        && if [ ${INSTALL_NPM_VUE_CLI} = true ]; then \
        npm install -g vue-cli \
        ;fi \
;fi

# Wouldn't execute when added to the RUN statement in the above block
# Source NVM when loading bash since ~/.profile isn't loaded on non-login shell
RUN if [ ${INSTALL_NODE} = true ]; then \
    echo "" >> ~/.bashrc && \
    echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc && \
    echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm' >> ~/.bashrc \
;fi

# Add NVM binaries to root's .bashrc
USER root

RUN if [ ${INSTALL_NODE} = true ]; then \
    echo "" >> ~/.bashrc && \
    echo 'export NVM_DIR="/home/laradock/.nvm"' >> ~/.bashrc && \
    echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm' >> ~/.bashrc \
;fi

# Add PATH for node
ENV PATH $PATH:$NVM_DIR/versions/node/v${NODE_VERSION}/bin

RUN if [ ${NPM_REGISTRY} ]; then \
    . ~/.bashrc && npm config set registry ${NPM_REGISTRY} \
;fi




WORKDIR /srv/app

ps fax дает:

PID TTY      STAT   TIME COMMAND
 21 pts/0    Ss     0:00 bash
300 pts/0    R+     0:00  \_ ps fax
  1 ?        Ss     0:00 apache2 -DFOREGROUND
 16 ?        S      0:00 apache2 -DFOREGROUND
 17 ?        S      0:00 apache2 -DFOREGROUND
 18 ?        S      0:00 apache2 -DFOREGROUND
 19 ?        S      0:00 apache2 -DFOREGROUND
 20 ?        S      0:00 apache2 -DFOREGROUND

Это как-то связано с этим: "boot2docker основан на VirtualBox. Virtualbox не допускает символические ссылки на общие папки по соображениям безопасности."

Выполнение установки npm через Docker на хосте Windows

1 Ответ

0 голосов
/ 28 июня 2018

Похоже, что npm config set registry ${NPF_REGISTRY} не закончено, поэтому, возможно, именно поэтому ваш npm install находит ETXTBSY.

Попробуйте удалить из Dockerfile RUN if [ ${NPM_REGISTRY} ]; then \ . ~/.bashrc && npm config set registry ${NPM_REGISTRY} \ ;fi и выполните его вручную до npm install и посмотрите, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...