Docker Apache 2挂载卷:避免/etc/httpd文件删除及配置异常
问题分析与解决方法
报错原因
你当前用./apache:/etc/httpd的挂载方式是直接替换容器内的整个/etc/httpd目录,本地apache目录里没有容器原有的httpd.conf文件,所以启动时会提示找不到该文件。
可行性说明
完全可以只覆盖/etc/httpd内的指定子目录/文件,同时保留容器原有其他内容。Docker支持挂载单个文件或子目录,不会替换整个父目录。
具体解决步骤
修改你的Docker Compose配置中的volumes部分,把整个目录挂载替换为单个子目录的挂载:
apache: container_name: apache image: cytopia/apache-2.2 volumes: - ./src:/var/www # 替换原有的整个目录挂载,改为逐个挂载子目录 - ./apache/conf:/etc/httpd/conf - ./apache/conf.d:/etc/httpd/conf.d - ./apache/conf.v:/etc/httpd/conf.v depends_on: - php - mysql ports: - "8088:80" networks: - project
额外说明
如果需要修改容器原有的httpd.conf文件:
- 先从运行中的容器(或直接从镜像)复制原文件到本地:
# 先临时启动容器(即使报错也可执行复制操作) docker cp apache:/etc/httpd/conf/httpd.conf ./apache/conf/httpd.conf - 编辑本地的
httpd.conf后,保持上面的子目录挂载即可(修改后的文件会自动同步到容器内)。
这样配置后,容器内的/etc/httpd目录除了你指定的三个子目录被本地内容替换外,其他原有文件和目录都会保留,apache启动时就能正常找到httpd.conf了。
内容的提问来源于stack exchange,提问作者Mr. Kenneth
相关产品推荐
相关产品推荐

