我正在使用docker docker-compose来运行web应用程序。我想在容器中进行更改,修改一些配置文件,并在不丢失修改的情况下重新启动容器。
我正在创建一个容器,使用
sudo docker-compose up
然后我跑
sudo -it -u 0 <container-id> bash
在配置文件中更改之后,一切看起来都很好。如果我重新启动执行的容器
docker container restart $(docker ps -a -q)
所有更改都被丢弃。有人能给我解释一下在重启后不丢失修改的最好方法吗?
发布于 2019-03-15 19:52:36
感谢@David Maze的回复,在我的情况下,我有一个脚本来更改我的应用程序中的许多参数,并在我的容器中执行脚本后生成ssl证书,我必须重新启动contianer
我的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
发布于 2019-03-15 18:44:56
这里的一个有用的技术是在主机上存储配置文件的副本,然后使用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工作流的一部分。
https://stackoverflow.com/questions/55180323
复制相似问题