[docker][php] eseguire comando ubuntu

Configurazione e uso di IDE, editor, compilatori, in fase di programmazione.
Avatar utente
london3
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 560
Iscrizione: domenica 19 gennaio 2014, 16:22
Desktop: ubuntu:GNOME
Distribuzione: Ubuntu 22.04.1 LTS

[docker][php] eseguire comando ubuntu

Messaggio da london3 »

Codice: Seleziona tutto

$ docker-compose run --rm php -r "echo system('/usr/bin/desktop-file-install --help');"
Starting php-ubuntu_ubuntu_1 ... done
Creating php-ubuntu_php_run  ... done
sh: 1: /usr/bin/desktop-file-install: not found
mmmhhh... facciamo qualche approfondimento

Codice: Seleziona tutto

$ tree
.
├── docker-compose.yml
└── Dockerfile

$ cat docker-compose.yml 
version: "3.8"
services:
    php:
        image: php
        depends_on:
            - ubuntu
    ubuntu:
        build: .

$ cat Dockerfile 
FROM ubuntu
RUN apt-get -y update && apt-get -y install desktop-file-utils
Proviamo ad eseguire /usr/bin/desktop-file-install direttamente dal servizio ubuntu

Codice: Seleziona tutto

$ docker-compose run --rm ubuntu /usr/bin/desktop-file-install --help
Creating php-ubuntu_ubuntu_run ... done
Usage:
  desktop-file-install [OPTION?] [FILE...]
bla bla bla...
Funziona.
Quindi sembra che il servizio php non riesce a interagire con il servizio ubuntu (soprattutto a livello di file-system), malgrado abbia specificato la direttiva

Codice: Seleziona tutto

        depends_on:
            - ubuntu
Forse bisognerebbe creare un volume condiviso per la directory /usr/bin
Qui dice un sacco di cose https://docs.docker.com/storage/volumes/ ma già la mente mi va in confusione :D
Computer: Lenovo ThinkPad L480
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2928
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: [docker][php] eseguire comando ubuntu

Messaggio da DoctorStrange »

Prima di pensare a docker-compose, ti suggerirei di avviare quell'immagine in una sessione locale di docker ed assicurarti che in questo modo funzioni.
Detto questo, "apt-get" è deprecato. Ormai anche da diverso tempo. Non saprei dirti se sia ancora manutenuto per questioni di retro compatibilità. Tu non hai di questi problemi. Sostituisci "apt-get" con "apt". Detto questo, anche se hai messo una dipendenza su docker compose, questo non ti garantisce che php venga installato correttamente. Prova a fare questo sul tuo Dockerfile:

Codice: Seleziona tutto

FROM ubuntu:focal
RUN apt -y update && \
apt -y upgrade && \
apt -y install php && \
apt -y install desktop-file-utils && \
update-alternatives --install /usr/bin/desktop-file-install desktop-file-install /full/path/desktop-file-install 1 && \
update-alternatives --set desktop-file-install  /full/path/desktop-file-install && \
echo update-alternatives --display desktop-file-install
Detto questo, come sempre, avvia in istanza locale l'immagine Docker cosi generata, e vedi se funziona. Logicamente dovrai personalizzare il Dockerfile che ti ho appena dato, con il full path dell'applicazione che vuoi installare. Domanda. Con docker, non sarebbe meglio scaricare un pacchetto tarball di quest'applicazione, e poi fare manualmente i puntamenti?
Avatar utente
corradoventu
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4002
Iscrizione: domenica 27 aprile 2008, 22:23
Desktop: GNOME
Distribuzione: Ubuntu 22.04,23.10,24.04,24.10
Sesso: Maschile
Località: Rezzoaglio (GE)
Contatti:

Re: [docker][php] eseguire comando ubuntu

Messaggio da corradoventu »

apt-get non è deprecato, ed è ovviamente mantenuto perchè è un comando (non un package) che fa parte del sistema, è solo meno comodo di apt.
apt è un package che usa apt-get per alcune funzioni.

Codice: Seleziona tutto

corrado@corrado-n03-oo-0626:~$ which apt-get
/usr/bin/apt-get

corrado@corrado-n03-oo-0626:~$ apt show apt
Package: apt
Version: 2.9.5
Priority: important
Build-Essential: yes
Section: admin
...................
Description: commandline package manager
 This package provides commandline tools for searching and
 managing as well as querying information about packages
 as a low-level access to all features of the libapt-pkg library.
 .
 These include:
  * apt-get for retrieval of packages and information about them
    from authenticated sources and for installation, upgrade and
    removal of packages together with their dependencies
  * apt-cache for querying available information about installed
    as well as installable packages
  * apt-cdrom to use removable media as a source for packages
  * apt-config as an interface to the configuration settings
  * apt-key as an interface to manage authentication keys

corrado@corrado-n03-oo-0626:~$ 
Con o senza religione, i buoni si comportano bene e i cattivi male, ma ci vuole la religione per far comportare male i buoni.
(Steven Weinberg)
Avatar utente
london3
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 560
Iscrizione: domenica 19 gennaio 2014, 16:22
Desktop: ubuntu:GNOME
Distribuzione: Ubuntu 22.04.1 LTS

Re: [docker][php] eseguire comando ubuntu

Messaggio da london3 »

DoctorStrange ha scritto:
venerdì 28 giugno 2024, 12:13
Prima di pensare a docker-compose, ti suggerirei di avviare quell'immagine in una sessione locale di docker ed assicurarti che in questo modo funzioni.
Potresti definire meglio cosa intendi per sessione locale?
Potresti definire meglio cosa intendi per avviare l'immagine?

Forse sarò fuori luogo, forse mi sbaglio, ma spero che tutti siamo al corrente che tra immagine e container c'è una certa differenza

https://www.google.com/search?q=avviare ... UTF-8#ip=1

https://www.google.com/search?q=docker+ ... e&ie=UTF-8
Detto questo, "apt-get" è deprecato. Ormai anche da diverso tempo. Non saprei dirti se sia ancora manutenuto per questioni di retro compatibilità. Tu non hai di questi problemi.
Non so di quali problemi parli, ma se lo dici tu mi fa piacere :)
Sostituisci "apt-get" con "apt". Detto questo, anche se hai messo una dipendenza su docker compose, questo non ti garantisce che php venga installato correttamente. Prova a fare questo sul tuo Dockerfile:

Codice: Seleziona tutto

FROM ubuntu:focal
RUN apt -y update && \
apt -y upgrade && \
apt -y install php && \
apt -y install desktop-file-utils && \
update-alternatives --install /usr/bin/desktop-file-install desktop-file-install /full/path/desktop-file-install 1 && \
update-alternatives --set desktop-file-install  /full/path/desktop-file-install && \
echo update-alternatives --display desktop-file-install
Detto questo, come sempre, avvia in istanza locale l'immagine Docker cosi generata, e vedi se funziona. Logicamente dovrai personalizzare il Dockerfile che ti ho appena dato, con il full path dell'applicazione che vuoi installare.
La questione dell'avvio rimane in sospeso. Come già detto, attendo chiarimenti.

Anche qui potresti definire meglio cosa intendi per full path dell'applicazione?
Potresti definire meglio cosa intendi per avviare l'immagine?
Domanda. Con docker, non sarebbe meglio scaricare un pacchetto tarball di quest'applicazione, e poi fare manualmente i puntamenti?
Non sapevo dell'esistenza dei tarballs.
Mi indicheresti un punto da cui partire?
Cosa sono i puntamenti?
Computer: Lenovo ThinkPad L480
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2928
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: [docker][php] eseguire comando ubuntu

Messaggio da DoctorStrange »

Con sessione locale intendo, avvia il container sul tuo sistema linux, entra nell'immagine, e vedi se hai installato correttamente. Visto che scrivi su un forum tematico per linux, mi aspetto che tu abbia linux installato e funzionante, dunque, cosa succede, se avvii il container (scusa se l'ho chiamato immagine ! ) con il normale

Codice: Seleziona tutto

docker run --tty --interactive nome
?
Il pacchetto tarball al quale mi riferivo, nella domanda che ti ho fatto riguarda l'applicazione che cerchi di installare sul container. Esiste un pacchetto tarball di questa applicazione che cerchi di installare: "desktop-file-install", oppure "desktop-file-utils"?
I puntamenti, che si aggiornano con l'utility "update-alternatives" servono a dire al sistema cosa utilizzare, quandfo tu, oppure una qualunque applicazione di sistema invoca genericamente questo "desktop-file-install".
Avviare l'immagine in locale, sarebbe stato anche utile per sapere se php è stato installato correttamente. Non mi risulta che php sia parte del kernel ufficiale, e quindi potrebbe avere a sua volta bisogno di dipendenze od utility che gli permettano di funzionare regolarmente. Non conosco php, e non mi interessa installarlo, quindi le mie sono congetture.

Detto questo. Non parteciperò oltre a questa conversazione.

Buona fortuna.
Avatar utente
london3
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 560
Iscrizione: domenica 19 gennaio 2014, 16:22
Desktop: ubuntu:GNOME
Distribuzione: Ubuntu 22.04.1 LTS

Re: [docker][php] eseguire comando ubuntu

Messaggio da london3 »

corradoventu ha scritto:
venerdì 28 giugno 2024, 12:56
apt-get non è deprecato, ed è ovviamente mantenuto perchè è un comando (non un package) che fa parte del sistema, è solo meno comodo di apt.
apt è un package che usa apt-get per alcune funzioni.

Codice: Seleziona tutto

corrado@corrado-n03-oo-0626:~$ which apt-get
/usr/bin/apt-get

corrado@corrado-n03-oo-0626:~$ apt show apt
Package: apt
Version: 2.9.5
Priority: important
Build-Essential: yes
Section: admin
...................
Description: commandline package manager
 This package provides commandline tools for searching and
 managing as well as querying information about packages
 as a low-level access to all features of the libapt-pkg library.
 .
 These include:
  * apt-get for retrieval of packages and information about them
    from authenticated sources and for installation, upgrade and
    removal of packages together with their dependencies
  * apt-cache for querying available information about installed
    as well as installable packages
  * apt-cdrom to use removable media as a source for packages
  * apt-config as an interface to the configuration settings
  * apt-key as an interface to manage authentication keys

corrado@corrado-n03-oo-0626:~$ 
Grazie per le precisazioni
Computer: Lenovo ThinkPad L480
Avatar utente
london3
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 560
Iscrizione: domenica 19 gennaio 2014, 16:22
Desktop: ubuntu:GNOME
Distribuzione: Ubuntu 22.04.1 LTS

Re: [docker][php] eseguire comando ubuntu

Messaggio da london3 »

DoctorStrange ha scritto:
venerdì 28 giugno 2024, 16:24
Con sessione locale intendo, avvia il container sul tuo sistema linux, entra nell'immagine, e vedi se hai installato correttamente. Visto che scrivi su un forum tematico per linux, mi aspetto che tu abbia linux installato e funzionante, dunque, cosa succede, se avvii il container (scusa se l'ho chiamato immagine ! ) con il normale

Codice: Seleziona tutto

docker run --tty --interactive nome
?
Succede questo

Codice: Seleziona tutto

$ docker run --tty --interactive nome
Unable to find image 'nome:latest' locally
docker: Error response from daemon: pull access denied for nome, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
Ma siccome sono costretto (a leggere nel pensiero), provo ad andare per intuito

Codice: Seleziona tutto

$ docker run --tty --interactive my-container
Unable to find image 'my-container:latest' locally
docker: Error response from daemon: pull access denied for my-container, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
Provo quindi a creare il container partendo dal Dockerfile da te suggerito

Codice: Seleziona tutto

$ cat Dockerfile 
FROM ubuntu:focal
RUN apt -y update && \
apt -y upgrade && \
apt -y install php && \
apt -y install desktop-file-utils && \
update-alternatives --install /usr/bin/desktop-file-install desktop-file-install /full/path/desktop-file-install 1 && \
update-alternatives --set desktop-file-install  /full/path/desktop-file-install && \
echo update-alternatives --display desktop-file-install

$ docker build -t my-container .
blabla...
Setting up tzdata (2024a-0ubuntu0.20.04) ...
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
Configuring tzdata
------------------

Please select the geographic area in which you live. Subsequent configuration
questions will narrow this down by presenting a list of cities, representing
the time zones in which they are located.

  1. Africa      4. Australia  7. Atlantic  10. Pacific  13. Etc
  2. America     5. Arctic     8. Europe    11. SystemV
  3. Antarctica  6. Asia       9. Indian    12. US
Geographic area: 8
^C
Premo 8 ma il processo si blocca e devo terminarlo premendo CTRL+C
Il pacchetto tarball al quale mi riferivo, nella domanda che ti ho fatto riguarda l'applicazione che cerchi di installare sul container. Esiste un pacchetto tarball di questa applicazione che cerchi di installare: "desktop-file-install", oppure "desktop-file-utils"?
È indifferente, purchè contenga il comando desktop-file-install
Computer: Lenovo ThinkPad L480
Avatar utente
london3
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 560
Iscrizione: domenica 19 gennaio 2014, 16:22
Desktop: ubuntu:GNOME
Distribuzione: Ubuntu 22.04.1 LTS

Re: [docker][php] eseguire comando ubuntu

Messaggio da london3 »

Inserendo la direttiva ARG DEBIAN_FRONTEND=noninteractive nel file Dockerfile, ho risolto il problema della scelta della lingua.
Però c'è ancora qualcosa che non va (che non comprendo)

Codice: Seleziona tutto

+ cat Dockerfile
FROM ubuntu:focal
ARG DEBIAN_FRONTEND=noninteractive
RUN apt -y update \
&& apt -y upgrade \
&& apt -y install php desktop-file-utils \
&& update-alternatives \
    --install /usr/bin/desktop-file-install desktop-file-install /full/path/desktop-file-install 1 \
&& update-alternatives \
    --set desktop-file-install /full/path/desktop-file-install \
&& echo update-alternatives \
    --display desktop-file-install

+ docker build -t ubuntu-php .
blabla...
74.14 update-alternatives: error: alternative path /full/path/desktop-file-install doesn't exist
------
Dockerfile:3
--------------------
   2 |     ARG DEBIAN_FRONTEND=noninteractive
   3 | >>> RUN apt -y update \
   4 | >>> && apt -y upgrade \
   5 | >>> && apt -y install php \
   6 | >>> && apt -y install desktop-file-utils \
   7 | >>> && update-alternatives --install /usr/bin/desktop-file-install desktop-file-install /full/path/desktop-file-install 1 \
   8 | >>> && update-alternatives --set desktop-file-install /full/path/desktop-file-install \
   9 | >>> && echo update-alternatives --display desktop-file-install
  10 |     
--------------------
ERROR: failed to solve: process "/bin/sh -c apt -y update && apt -y upgrade && apt -y install php && apt -y install desktop-file-utils && update-alternatives --install /usr/bin/desktop-file-install desktop-file-install /full/path/desktop-file-install 1 && update-alternatives --set desktop-file-install /full/path/desktop-file-install && echo update-alternatives --display desktop-file-install" did not complete successfully: exit code: 2

+ docker run --rm ubuntu-php -r echo system('/usr/bin/desktop-file-install --help');
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "-r": executable file not found in $PATH: unknown.

74.14 update-alternatives: error: alternative path /full/path/desktop-file-install doesn't exist


Quindi che path dovrei specificare?
Computer: Lenovo ThinkPad L480
Avatar utente
DoctorStrange
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2928
Iscrizione: mercoledì 14 ottobre 2015, 9:33
Desktop: Gnome3
Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
Sesso: Maschile
Località: Roma, Italia

Re: [docker][php] eseguire comando ubuntu

Messaggio da DoctorStrange »

Il Dockerfile che io ti ho inviato, tu, logicamente, lo devi personalizzare.
In funzione, di quelli che sono i percorsi legittimi dei tuoi files.
Se io scrivo "/full/path/file" tu non ci devi lasciare questa stringa nel Dockerfile.
Devi mettere il reale percorso, di dove si trova ciò che devi installare.
Non ti si può spiegare anche che devi sostituire "/full/path" con il vero full path.
Un minimo di competenza pregressa, con Docker la devi avere, prima di fare configurazioni che sono un minimo custom.
Scrivi risposta

Ritorna a “Strumenti per la programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 1 ospite