Потеря всех модификаций при перезапуске контейнера с помощью Docker Compose - PullRequest
0 голосов
/ 15 марта 2019

Я использую docker docker-compose для запуска веб-приложения. Я хочу изменить внутри моего контейнера и изменить какой-либо конфигурационный файл и перезапустить контейнер без потери изменений.

Я создаю контейнер, используя

sudo docker-compose up

Тогда я бегу

sudo -it -u 0 <container-id> bash

После изменения в конфигурационных файлах все выглядит хорошо. Если я перезапущу контейнер, выполняющий

docker container restart $(docker ps -a -q)

все изменения там, где отбрасываются. Может кто-нибудь объяснить мне лучший способ сделать это без потери модификаций после перезапуска?

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

спасибо @David Maze за ваш ответ, в моем случае у меня есть скрипт для изменения многих параметров в моем приложении и генерации ssl-сертификата после выполнения скрипта в моем контейнере. Мне нужно перезапустить contianer

мой докер-compose.yml

version: '2.3'
services:
  wso2iot-mysql:
    image: mysql:5.7.20
    container_name: wso2iot-mysql
    hostname: wso2iot-mysql
    ports:
      - 3306
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - ./mysql/scripts:/docker-entrypoint-initdb.d
    healthcheck:
      test: ["CMD", "mysqladmin" ,"ping", "-uroot", "-proot"]
      interval: 10s
      timeout: 60s
      retries: 5
  wso2iot-broker:
    image: docker.wso2.com/wso2iot-broker:3.3.0
    container_name: wso2iot-broker
    hostname: wso2iot-broker
    ports:
      - "9446:9446"
      - "5675:5675"
    healthcheck:
      test: ["CMD", "nc", "-z", "localhost", "9446"]
      interval: 10s
      timeout: 120s
      retries: 5
    depends_on:
      wso2iot-mysql:
        condition: service_healthy
    volumes:
      - ./broker:/home/wso2carbon/volumes/wso2/broker
  wso2iot-analytics:
    image: docker.wso2.com/wso2iot-analytics:3.3.0
    container_name: wso2iot-analytics
    hostname: wso2iot-analytics
    healthcheck:
      test: ["CMD", "curl", "-k", "-f", "https://localhost:9445/carbon/admin/login.jsp"]
      interval: 10s
      timeout: 120s
      retries: 5
    depends_on:
      wso2iot-mysql:
        condition: service_healthy
    volumes:
      - ./analytics:/home/wso2carbon/volumes/wso2/analytics
    ports:
      - "9445:9445"
  wso2iot-server:
    image: docker.wso2.com/wso2iot-server:3.3.0
    container_name: wso2iot-server
    hostname: wso2iot-server
    healthcheck:
      test: ["CMD", "curl", "-k", "-f", "https://localhost:9443/carbon/admin/login.jsp"]
      interval: 10s
      timeout: 120s
      retries: 5
    depends_on:
      wso2iot-mysql:
        condition: service_healthy
    volumes:
      - ./iot-server:/home/wso2carbon/volumes
    ports:
      - "9443:9443"
    links:
      - wso2iot-mysql
0 голосов
/ 15 марта 2019

Полезный метод здесь - сохранить копии файлов конфигурации на хосте, а затем внедрить их с помощью директивы Docker-Compose volumes:.

version: '3'
services:
  myapp:
    image: me/myapp
    ports: ['8080:8080']
    volumes:
      - './myapp.ini:/app/myapp.ini'

Обычно уничтожать и воссоздавать контейнеры довольно обычно, и вы хотите, чтобы все было настроено так, чтобы все было готово к немедленному запуску, как только вы docker run или docker-compose up.

Другое хорошее использование каталогов, связанных с привязкой, подобных этому, - предоставить контейнеру место для публикации файлов журналов, а если вашему контейнеру нужны постоянные данные в файловой системе, то есть место для хранения этих данных во время выполнения контейнера.

docker exec - полезный инструмент отладки, но он не предназначен для того, чтобы быть частью вашего основного рабочего процесса Docker.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...