Docker修改已停止运行容器配置文件

前言

基于Docker的Nginx服务中,笔者修改了Nginx的配置文件,结果重启容器时导致Nginx起不来,又不能使用 docker exec ...的方式进入容器修改配置文件。

解决步骤

# 查看容器报错原因
[root@pro nginx]# docker logs nginx
nginx: [emerg] unknown directive "gizp" in /etc/nginx/nginx.conf:29
# 在此目录找到nginx容器的配置文件
[root@pro nginx]# cd /var/lib/docker/overlay2/
[root@pro overlay2]# find ./ -name nginx.conf
./7baeb968df6b073708cce37a182cf54fd033023a5eda6bb6d1077438d950ce6e/diff/etc/nginx/nginx.conf
# 将文件修改正确
[root@pro overlay2]# vim ./7baeb968df6b073708cce37a182cf54fd033023a5eda6bb6d1077438d950ce6e/diff/etc/nginx/nginx.conf
# 重启容器
[root@pro overlay2]# docker restart nginx
nginx

问题解决。

Docker中,直接修改正在运行容器的暴露端口并不是一个推荐的操作,因为Docker的设计理念是容器应该是不可变的。然而,如果你确实需要修改容器的端口,可以通过以下几种方法来实现: ### 方法一:停止并重新启动容器 1. **停止容器**: ```bash docker stop <container_id_or_name> ``` 2. **删除容器**: ```bash docker rm <container_id_or_name> ``` 3. **重新创建容器并指定新的端口映射**: ```bash docker run -d -p <new_host_port>:<container_port> --name <container_name> <image_name> ``` ### 方法二:使用Docker Compose 如果你使用的是Docker Compose,可以修改`docker-compose.yml`文件中的端口映射,然后重新启动容器: 1. **修改`docker-compose.yml`文件**: ```yaml version: '3' services: web: image: <image_name> ports: - "<new_host_port>:<container_port>" ``` 2. **重新启动容器**: ```bash docker-compose up -d ``` ### 方法三:使用端口转发(不推荐) 虽然不推荐,但你可以通过`iptables`进行端口转发: 1. **添加端口转发规则**: ```bash iptables -t nat -A DOCKER -p tcp --dport <new_host_port> -j DNAT --to-destination <container_ip>:<container_port> ``` 2. **保存规则**: ```bash iptables-save ``` ### 注意事项 - **数据持久化**:确保在停止和删除容器之前,已经备份了重要数据。 - **服务中断**:重新创建容器会导致服务短暂中断,请选择合适的时间进行操作。 通过以上方法,你可以修改正在运行容器的暴露端口。推荐使用Docker Compose进行管理,以便于配置和部署。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值