Nuova risposta
Docker Compose è stato aggiornato. Ora hanno un formato di file versione 2 .
I file della versione 2 sono supportati da Compose 1.6.0+ e richiedono un Docker Engine della versione 1.10.0+.
Ora supportano la funzionalità di rete di Docker che quando viene eseguita imposta una rete predefinita chiamata myapp_default
Dalla loro documentazione, il tuo file sarebbe simile al seguente:
version: '2'
services:
web:
build: .
ports:
- "8000:8000"
fpm:
image: phpfpm
nginx
image: nginx
Poiché questi contenitori vengono aggiunti automaticamente alla rete predefinita myapp_default , saranno in grado di parlare tra loro. Avresti quindi nella configurazione di Nginx:
fastcgi_pass fpm:9000;
Inoltre, come menzionato da @treeface nei commenti, ricorda di assicurarti che PHP-FPM sia in ascolto sulla porta 9000, questo può essere fatto modificando /etc/php5/fpm/pool.d/www.conf
dove ti servelisten = 9000
.
Vecchia risposta
Ho mantenuto il seguente qui per coloro che utilizzano una versione precedente di Docker / Docker compose e vorrei le informazioni.
Ho continuato a imbattermi in questa domanda su google quando cercavo di trovare una risposta a questa domanda, ma non era proprio quello che stavo cercando a causa dell'enfasi Q / A su docker-compose (che al momento della scrittura ha solo supporto sperimentale per funzionalità di rete docker). Quindi ecco la mia opinione su ciò che ho imparato.
Docker ha recentemente deprecato la sua funzione di collegamento a favore della sua funzione di rete
Pertanto, utilizzando la funzionalità Docker Networks è possibile collegare i contenitori seguendo questi passaggi. Per spiegazioni complete sulle opzioni, leggere i documenti collegati in precedenza.
Per prima cosa crea la tua rete
docker network create --driver bridge mynetwork
Quindi esegui il tuo contenitore PHP-FPM assicurandoti di aprire la porta 9000 e assegnarla alla tua nuova rete ( mynetwork
).
docker run -d -p 9000 --net mynetwork --name php-fpm php:fpm
La parte importante qui è il file --name php-fpm
fine del comando che è il nome, ne avremo bisogno in seguito.
Quindi esegui nuovamente il tuo contenitore Nginx assegnato alla rete che hai creato.
docker run --net mynetwork --name nginx -d -p 80:80 nginx:latest
Per i contenitori PHP e Nginx puoi anche aggiungere --volumes-from
comandi ecc. Come richiesto.
Ora arriva la configurazione di Nginx. Quale dovrebbe essere qualcosa di simile a questo:
server {
listen 80;
server_name localhost;
root /path/to/my/webroot;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}
Notare fastcgi_pass php-fpm:9000;
nel blocco di posizione. Quello sta dicendo il contenitore di contatto php-fpm
sul porto 9000
. Quando aggiungi contenitori a una rete bridge Docker, tutti ottengono automaticamente un aggiornamento del file host che inserisce il nome del contenitore rispetto al loro indirizzo IP. Quindi, quando Nginx vede che saprà contattare il contenitore PHP-FPM che hai nominato in php-fpm
precedenza e assegnato alla tua mynetwork
rete Docker.
Puoi aggiungere quella configurazione Nginx durante il processo di compilazione del tuo contenitore Docker o successivamente dipende da te.