Правильно поддерживать жизненный цикл двух процессов сложно.Если один процесс умирает, вы хотите, чтобы что-то заметил и либо убил другой процесс, либо перезапустил один, и вы, вероятно, хотите знать, что это происходит.docker logs
, вероятно, не будет автоматически объединять выходные данные двух процессов (и в зависимости от того, как вы их запускаете, может и не захватывать).Если одному процессу требуется больше вычислительной мощности, чем другому, вы не можете масштабировать один без масштабирования другого;если вы обновляете программное обеспечение в одном процессе, вы не можете перезапустить его, не перезапуская другой.
Короче говоря: обычно это не рекомендуется в качестве наилучшей практики;запуск процессов в двух отдельных контейнерах обычно предпочтителен.
Если вы сделаете это, в этом случае только , два процесса в одном контейнере будут видеть друг друга как localhost
,и вы можете передать это как параметр переменной среды для одного процесса, чтобы увидеть другой.Вам не нужно специально «выставлять» или «публиковать» порт.Типичный файл docker-compose.yml
может выглядеть как
version: '3'
services:
myapp:
build: .
ports: ['8080:8080']
env:
- BACKEND_URL: 'http://localhost:12345'
, но лучший файл docker-compose.yml
может выглядеть как
version: 3
services:
myapp:
build: .
ports: ['8080:8080']
env:
- BACKEND_URL: 'http://backend:12345'
command: 'myapp -bind 0.0.0.0:8080'
backend:
build: .
command: 'backend -bind 0.0.0.0:12345'