Possiamo usare WORKDIR
per impostare una directory come directory di lavoro in Dockerfile
, ma qual è il valore predefinito se non lo impostiamo?
Possiamo usare WORKDIR
per impostare una directory come directory di lavoro in Dockerfile
, ma qual è il valore predefinito se non lo impostiamo?
Risposte:
dice di sì /
, quindi la directory root
L'impostazione predefinita è infatti /
come affermato altrove. Vale la pena ricordare, tuttavia, che non si eseguirà quasi mai un'immagine docker vuota ( FROM scratch
), quindi WORKDIR
è probabile che sia impostata dall'immagine di base che si sta utilizzando.
Ad esempio, https://github.com/docker-library/tomcat/blob/master/Dockerfile-alpine.template ha WORKDIR $CATALINA_HOME
e https://github.com/dockerfile/ubuntu/blob/master/Dockerfile ha WORKDIR /root
. ( https://hub.docker.com/r/base/archlinux/~/dockerfile/ non usa WORKDIR
tuttavia.)
È meglio, quindi, impostare il proprio in modo WORKDIR
esplicito.
La directory di lavoro predefinita per l'esecuzione dei file binari all'interno di un contenitore è la directory root ( /
), ma lo sviluppatore può impostare una directory diversa con il comando Dockerfile WORKDIR. L'operatore può sovrascriverlo con:
-w="": Working directory inside the container
Poiché non ci sono utenti ma una radice in un docker appena nato o un contenitore in senso stretto. Quindi, per ogni modifica ci sarà un commit per quel contenitore come ha detto questo ragazzo . Quindi il pwd di quello o come hai chiesto a WORKDIR è /
root per impostazione predefinita e ogni volta che esegui un /bin/bash
come questo:
$docker exec -i -t 53f784fwer54 /bin/bash
su un contenitore in esecuzione ti metterà qui /
nella directory principale.
/
è errata e irrilevante. La directory di lavoro predefinita di un nuovo contenitore è la stessa della directory di lavoro predefinita dell'immagine. Ad esempio, ho appena eseguito docker exec -ti <my_app> /bin/bash;
il nuovo processo bash pwd
e vedo che la directory di lavoro è /app
.
RUN pwd