2015-08-07 15 views
27

Ancora un'altra domanda di link simbolico Docker. Ho un sacco di file che voglio copiare su tutti i miei build Docker. La mia struttura è dir:Docker seguire symlink al di fuori del contesto

parent_dir 
    - common_files 
     - file.txt 
    - dir1 
     - Dockerfile 
     - symlink -> ../common_files 

Nel precedente esempio, voglio file.txt essere copiati quando ho Docker costruire all'interno dir1. Ma non voglio mantenere più copie di file.txt. Per this link, as of docker version 0.10, finestra mobile build deve

Seguire link simbolici all'interno della radice del contenitore per le istruzioni ADD compilazione.

Ma ho alcun file o directory quando costruire con una di queste righe nel mio Dockerfile:

ADD symlink /path/dirname o ADD symlink/file.txt /path/file.txt

opzione di montaggio non risolverà per me (croce piattaforma...). Ho provato tar -czh . | docker build -t senza successo.

C'è un modo per rendere Docker seguire il collegamento simbolico e copiare common_files/file.txt nel contenitore costruito?

risposta

26

Questo non è possibile e non sarà implementato. Si prega di dare un'occhiata al discussion on github issue #1676:

Non lo permettiamo perché non è ripetibile. Un link simbolico sul tuo computer non è lo stesso del mio computer e lo stesso file Docker produrrà due risultati diversi. Anche la presenza di collegamenti simbolici a/etc/paasswd causerebbe problemi perché collegava i file host e non i file locali.

+0

Grazie. Sì, ho notato questo link in precedenza, ma pensavo che fosse per una versione molto più vecchia di docker (0.6.1). Questo è possibile https://github.com/docker/docker/blob/master/CHANGELOG.md#0100-2014-04-08 – Ravi

+0

Anche se "parent_dir" è estratto in qualsiasi computer e se il collegamento simbolico ha un percorso relativo a "file_comuni", sarà ripetibile. – Ravi

+1

La tua citazione 'Segui i collegamenti simbolici all'interno della radice del contenitore per le istruzioni di ADD ADD. Significa che * all'interno del contenitore * i collegamenti simbolici sono seguiti. Non nella directory del contesto di build. In 'ADD file.txt/dir/file.txt' la directory' dir' potrebbe essere un link simbolico. Gli argomenti che ho citato nella mia risposta sono ancora validi e i symlink non sono ancora seguiti nell'ultima versione. Potresti incorrere in problemi (riguardo alla ripetibilità) quando memorizzi i collegamenti simbolici nei sistemi di controllo di revisione come * git *. Pertanto, fai riferimento a [questa domanda] (http://stackoverflow.com/questions/86402/how-can-i-get-git-to-follow-symlinks). – h3nrik

0

Per gli altri con questo problema, per favore see this link. Personalmente ho optato per la soluzione "costruisci un'immagine di base comune" e funziona brillantemente.

Problemi correlati