Błąd "permission denied, open '/var/www/package.json'" podczas budowania obrazu

Błąd "permission denied, open '/var/www/package.json'" podczas budowania obrazu
Raloseq
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 291
0

Chce skonteneryzowac apke w Laravel,nginx,mariadb,php i buduję teraz dockerfile jak odpadalm docker-compose build to dostaje Error: EACCES: permission denied, open '/var/www/package.json' gdy uruchamia się RUN npm init -y. Wiem, że chodzi o uprawnienia ale dałem chmod i dalej nie działa

Kopiuj
FROM php:8.1

RUN apt-get update -y && apt-get install -y \
    nodejs \
    npm \
    curl \
    zip \
    unzip \
    && docker-php-ext-install pdo pdo_mysql

RUN apt-get clean && rm -rf /var/lib/apt/lists/*

COPY . /var/www
WORKDIR /var/www

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

RUN useradd www -u 1000 -ms /bin/bash
RUN usermod -aG sudo www
RUN chmod -R 755 /var/www
USER www


RUN npm init -y
RUN npm install -g n && n 16.17.0
RUN npm install

RUN composer install --no-interaction --no-progress

RUN cd public && ln -sf ../storage/app/public/ storage

ENV PORT=8000
ENTRYPOINT [ "docker/entrypoint.sh" ]
jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
0

Nie jestem linuxowcem ale na całe www dajesz 755 będąc rootem. Czyli inni mają prawo odczytu i uruchomienia. Potem przełączasz się na użytkownika www i dalej odpalasz na tym użytkowniku npm install który chce zapisu do package.json

Raloseq
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 291
0
jurek1980 napisał(a):

Nie jestem linuxowcem ale na całe www dajesz 755 będąc rootem. Czyli inni mają prawo odczytu i uruchomienia. Potem przełączasz się na użytkownika www i dalej odpalasz na tym użytkowniku npm install który chce zapisu do package.json

Próbowałem, na odwrót ale wtedy nie mogę dać chmod bo user nie ma uprawnień. Myślałem, że jak dam go do grupy sudo to będzie miał uprawnienia.

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3581
0

Spróbuj przełączyć użytkownika za Composer install

L1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 104
1

Dodaj w linii 20 komendę: chown -R www:www /var/www i powinno zadziałać.

Raloseq
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 291
0
loki121212 napisał(a):

Dodaj w linii 20 komendę: chown -R www:www /var/www i powinno zadziałać.

Pomogło ale mam kolejny problem z uprawnieniami teraz w linijce RUN npm install -g n && n 16.17.0
Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules'
To stwierdziłem, że dam w tym samym miejscu RUN chown -R www:www /usr/local/lib/node_modules ale nic nie pomogło.

Umieszczając go po linijce z npm init (co wydawałoby się sensowane bo tworzy folder node_modules) dalej nie działa
chown: cannot access '/usr/local/lib/node_modules': No such file or directory

Kopiuj
RUN useradd www -u 1000 -ms /bin/bash
RUN usermod -aG sudo www
RUN chown -R www:www /var/www
USER www

RUN npm init -y
RUN npm install -g n && n 16.17.0
RUN npm install
L1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 104
1

No to zrób tak:

Kopiuj
RUN useradd www -u 1000 -ms /bin/bash
RUN usermod -aG sudo www
RUN chown -R www:www /var/www

RUN npm init -y
RUN npm install -g n && n 16.17.0
RUN npm install

USER www
WhiteLightning
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3257
1

Dobra praktyka jest laczenie RUN, COPY i ADD tak zeby miec pojedyncze wywolania:

https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#minimize-the-number-of-layers

W przeciwnym wypadku kazde takie wywolanie robi niepotrzebnie nowy layer.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.