我正在使用docker docker-compose运行Web应用程序。我想在容器内部进行更改并修改一些配置文件,然后重新启动容器而不丢失修改。
我正在使用创建容器
sudo docker-compose up
然后我跑
sudo -it -u 0 <container-id> bash
更改配置文件后,一切看起来都很好。如果我重新启动容器执行
docker container restart $(docker ps -a -q)
所有更改都被丢弃。有人可以向我解释这样做的最佳方法,而又不会在重启后丢失任何修改吗?
答案 0 :(得分:0)
这里有用的技术是将配置文件的副本存储在主机上,然后使用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工作流程的一部分。
答案 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