使用Docker Compose重新启动容器时丢失所有修改

时间:2019-03-15 10:18:20

标签: docker docker-compose

我正在使用docker docker-compose运行Web应用程序。我想在容器内部进行更改并修改一些配置文件,然后重新启动容器而不丢失修改。

我正在使用创建容器

sudo docker-compose up

然后我跑

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

更改配置文件后,一切看起来都很好。如果我重新启动容器执行

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

所有更改都被丢弃。有人可以向我解释这样做的最佳方法,而又不会在重启后丢失任何修改吗?

2 个答案:

答案 0 :(得分:0)

这里有用的技术是将配置文件的副本存储在主机上,然后使用Docker-Compose volumes:指令注入它们。

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

销毁和重新创建容器是相当常规的事情,并且您希望设置事物,以便一旦docker rundocker-compose up之后一切都准备就绪。

像这样的绑定安装目录的其他良好用途是为容器提供了一个发布日志文件的地方,如果您的容器恰巧需要文件系统上的持久性数据,则可以在整个容器运行中存储该数据。

docker exec是一个有用的调试工具,但并不打算成为您核心Docker工作流程的一部分。

答案 1 :(得分:0)

感谢@David Maze在我的情况下的答复,我有à脚本,可以在我的应用程序中更改许多参数并在容器中执行脚本后生成ssl证书,我必须重新启动容器

我的docker-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