首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当使用Docker Compose重启容器时,丢失所有修改

当使用Docker Compose重启容器时,丢失所有修改
EN

Stack Overflow用户
提问于 2019-03-15 18:18:20
回答 2查看 1.7K关注 0票数 1

我正在使用docker docker-compose来运行web应用程序。我想在容器中进行更改,修改一些配置文件,并在不丢失修改的情况下重新启动容器。

我正在创建一个容器,使用

代码语言:javascript
运行
复制
sudo docker-compose up

然后我跑

代码语言:javascript
运行
复制
sudo -it -u 0 <container-id> bash

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

代码语言:javascript
运行
复制
docker container restart $(docker ps -a -q)

所有更改都被丢弃。有人能给我解释一下在重启后不丢失修改的最好方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-15 19:52:36

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

我的docker-compose.yml

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2019-03-15 18:44:56

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

代码语言:javascript
运行
复制
version: '3'
services:
  myapp:
    image: me/myapp
    ports: ['8080:8080']
    volumes:
      - './myapp.ini:/app/myapp.ini'

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

像这样的绑定挂载目录的其他很好的用途是为容器提供发布日志文件的位置,并且如果您的容器碰巧需要文件系统上的持久数据,则可以在容器运行时提供存储这些数据的位置。

docker exec是一个有用的调试工具,但它并不是核心Docker工作流的一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55180323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档