Новый ответ
Docker Compose обновлен. Теперь у них есть формат файла версии 2 .
Файлы версии 2 поддерживаются Compose 1.6.0+ и требуют Docker Engine версии 1.10.0+.
Теперь они поддерживают сетевую функцию Docker, которая при запуске устанавливает сеть по умолчанию с именем myapp_default.
Из их документации ваш файл будет выглядеть примерно так:
version: '2'
services:
web:
build: .
ports:
- "8000:8000"
fpm:
image: phpfpm
nginx
image: nginx
Поскольку эти контейнеры автоматически добавляются в сеть myapp_default по умолчанию, они смогут общаться друг с другом. Тогда у вас будет в конфигурации Nginx:
fastcgi_pass fpm:9000;
Также, как упоминалось @treeface в комментариях, не забудьте убедиться, что PHP-FPM прослушивает порт 9000, это можно сделать путем редактирования /etc/php5/fpm/pool.d/www.conf
там, где вам нужно listen = 9000
.
Старый ответ
Я сохранил приведенную ниже информацию для тех, кто использует старую версию Docker / Docker compose и хотел бы получить информацию.
Я все время натыкался на этот вопрос в Google, пытаясь найти ответ на этот вопрос, но это было не совсем то, что я искал из-за акцента в вопросах и ответах на docker-compose (который на момент написания имел только экспериментальную поддержку для сетевые функции докеров). Итак, вот мой взгляд на то, что я узнал.
Docker недавно отказался от функции ссылки в пользу функции сети.
Поэтому с помощью функции Docker Networks вы можете связывать контейнеры, выполнив следующие действия. Полное объяснение опций читайте в ранее связанных документах.
Сначала создайте свою сеть
docker network create --driver bridge mynetwork
Затем запустите контейнер PHP-FPM, убедившись, что вы открыли порт 9000 и назначили его новой сети ( mynetwork
).
docker run -d -p 9000 --net mynetwork --name php-fpm php:fpm
Важный бит здесь - это имя --name php-fpm
в конце команды, оно нам понадобится позже.
Затем снова запустите контейнер Nginx и назначьте его созданной вами сети.
docker run --net mynetwork --name nginx -d -p 80:80 nginx:latest
Для контейнеров PHP и Nginx вы также можете добавлять --volumes-from
команды и т. Д. По мере необходимости.
Теперь идет конфигурация Nginx. Что должно выглядеть примерно так:
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;
}
}
Обратите внимание на значок fastcgi_pass php-fpm:9000;
в блоке местоположения. То есть контактный контейнер php-fpm
в порту 9000
. Когда вы добавляете контейнеры в сеть моста Docker, все они автоматически получают обновление файла hosts, которое помещает их имя контейнера в соответствие с их IP-адресом. Поэтому, когда Nginx увидит, что он будет знать, что нужно связаться с контейнером PHP-FPM, который вы назвали php-fpm
ранее и назначили вашей mynetwork
сети Docker.
Вы можете добавить эту конфигурацию Nginx либо во время процесса сборки вашего контейнера Docker, либо после этого решать вам.