Документация о создании докера указывает, что links
устарела и должна быть заменена на depends_on
.
Это не так. Документы только говорят, что
links
также выражают зависимость между службами так же, как и depends_on
, поэтому они определяют порядок запуска службы.
Я не понимаю, как это закончится, что вы должны использовать depends_on
вместо links
. Вместо этого говорится, что если вам нужно запустить что-то в контейнере из другого контейнера, вы должны использовать depends_on
, а не links
. (Например, вы command
указываете выполняющиеся миграции в контейнере php
и вам необходимо дождаться контейнера postgres
).
С другой стороны, links
имеет предупреждение:
Если вам абсолютно не нужно продолжать его использование, мы рекомендуем использовать пользовательские сети для облегчения связи между двумя контейнерами вместо использования --link
.
В этом контексте --link
для docker
cli - это то же самое, что links
в docker-compose.yml
.
Теперь, к слову, если ваши контейнеры находятся в одной сети, вам не нужны никакие дополнительные специальные спецификации. Если не указано иное, сетевой драйвер по умолчанию - bridge
. Таким образом, если вы укажете docker-compose.yml
следующим образом, все ваши контейнеры должны находиться в одной сети и автоматически узнавать друг о друге.
version: "3.1"
services:
nginx:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./php/content:/srv/www/content
- ./static:/srv/www/static
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
nodejs:
image: node:alpine
environment:
NODE_ENV: production
working_dir: /home/app
restart: always
volumes:
- ./nodejs:/home/app
command: ["node", "index"]
php:
image: php:apache
volumes:
- ./php:/var/www/html
В этом случае nginx
должно работать с
location / {
try_files $uri nodejs;
}
и
location /api {
rewrite ^([^.\?]*[^/])$ $1/ break;
proxy_pass http://php:80;
}