другие ответы на перезапуск одного узла находятся на цели, docker-compose restart worker
. Это будет отскакивать от этого контейнера, но не включает никаких изменений, даже если вы перестроили его отдельно. Вы можете вручную установить stop
, rm
, create
и start
, но есть намного более простые методы.
Если вы обновили свой код, вы можете сделать сборку и загрузить в одну стадию с:
docker-compose up -d --build
Это будет первый перестраивать свои изображения из любого измененного кода, который не является быстрым, если нет изменения с момента повторного использования кеша. И затем он заменяет только измененные контейнеры. Если загруженные изображения устарели, вы можете предшествуют выше команды с:
docker-compose pull
Чтобы скачать любые измененные изображения первого (контейнеры не будет перезапущен, пока вы не запустите команду как показано выше up
). Выполнение начальной остановки не требуется.
И делать это только для одной службы, следовать вверх или тянуть команду с услугами, которые вы хотите задать, например:
docker-compose up -d --build worker
Вот краткий пример первого варианта, то Dockerfile структурирован так, чтобы сохранить часто меняющиеся части кода ближе к концу. Фактически требования вытягиваются отдельно для pip install
, так как этот файл редко изменяется. А поскольку контейнеры nginx и redis были обновлены, они не перезапускались. Общее время в течение всего процесса находился под 6 секунд:
$ time docker-compose -f docker-compose.nginx-proxy.yml up -d --build
Building counter
Step 1 : FROM python:2.7-alpine
---> fc479af56697
Step 2 : WORKDIR /app
---> Using cache
---> d04d0d6d98f1
Step 3 : ADD requirements.txt /app/requirements.txt
---> Using cache
---> 9c4e311f3f0c
Step 4 : RUN pip install -r requirements.txt
---> Using cache
---> 85b878795479
Step 5 : ADD . /app
---> 63e3d4e6b539
Removing intermediate container 9af53c35d8fe
Step 6 : EXPOSE 80
---> Running in a5b3d3f80cd4
---> 4ce3750610a9
Removing intermediate container a5b3d3f80cd4
Step 7 : CMD gunicorn app:app -b 0.0.0.0:80 --log-file - --access-logfile - --workers 4 --keep-alive 0
---> Running in 0d69957bda4c
---> d41ff1635cb7
Removing intermediate container 0d69957bda4c
Successfully built d41ff1635cb7
counter_nginx_1 is up-to-date
counter_redis_1 is up-to-date
Recreating counter_counter_1
real 0m5.959s
user 0m0.508s
sys 0m0.076s
для меня это сработало, но общий вопрос, если это разрешено здесь: означает «рестарт» позаботиться о связанных контейнеров и обновления/и т.д./хосты или не «перезагрузка» вообще меняет любые IP-адреса? – michabbb
Контейнеры связаны по имени и, как правило, единственным IP-адресом, о котором вам нужно беспокоиться, является внешний IP-адрес узла док-станции (обычно 192.168.99.100).Там, где могут возникнуть проблемы, если вы, скажем, перезапустите контейнер базы данных, к которому подключены другие контейнеры. Зависимые контейнеры должны быть достаточно упругими, чтобы повторно подключаться. –
OP заявляет, что ему необходимо «перезапустить его, чтобы применить изменения». Согласно документам команды 'docker-compose restart' НЕ будут применены никакие изменения. «Если вы вносите изменения в конфигурацию' docker-compose.yml', эти изменения не отражаются после выполнения этой команды ». Поэтому используйте 'docker-compose up -d -build'. https://docs.docker.com/compose/reference/restart/ – featherbelly