如何在bitnami/moodle容器中正确挂载php.ini文件
问题描述
需要编辑bitnami/moodle容器内的php.ini文件(路径为/opt/bitnami/php/etc/php.ini),但无法在容器中安装文本编辑器,尝试将该文件所在路径挂载到宿主机时,容器无法启动:
- 挂载
/opt/bitnami/php/etc目录时,报错:cp: cannot stat '/opt/bitnami/php/etc/common.conf.disabled': No such file or directory - 挂载
/opt目录时,报错:
Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "/opt/bitnami/scripts/moodle/entrypoint.sh": stat /opt/bitnami/scripts/moodle/entrypoint.sh: no such file or directory: unknown
当前使用的docker-compose.yml片段:
services: moodle: platform: linux/x86_64 container_name: foo_moodle depends_on: - moodle_db build: context: . dockerfile: Dockerfile ports: - "8080:8080" - "8443:8443" restart: unless-stopped environment: - MOODLE_DATABASE_TYPE=pgsql - MOODLE_DATABASE_HOST=moodle_db - MOODLE_DATABASE_PORT_NUMBER=5432 - MOODLE_DATABASE_USER=${MOODLE_DB_USER} - MOODLE_DATABASE_NAME=${MOODLE_DB_NAME} - MOODLE_DATABASE_PASSWORD=${MOODLE_DB_PASS} - MOODLE_SITE_NAME=${MOODLE_SITE_NAME} volumes: - ./moodle/mount_moodle:/bitnami/moodle - ./moodle/mount_moodle_data:/bitnami/moodledata
解决方案
不要挂载整个目录,而是单独挂载php.ini文件,步骤如下:
- 先将容器内的
php.ini文件复制到宿主机的目标路径:
# 若容器未启动,先临时启动容器 docker start foo_moodle # 复制容器内的php.ini到宿主机./moodle目录 docker cp foo_moodle:/opt/bitnami/php/etc/php.ini ./moodle/php.ini # 停止容器以便后续重新启动 docker stop foo_moodle
- 修改
docker-compose.yml的volumes部分,添加单个文件挂载:
volumes: - ./moodle/mount_moodle:/bitnami/moodle - ./moodle/mount_moodle_data:/bitnami/moodledata - ./moodle/php.ini:/opt/bitnami/php/etc/php.ini
- 重新启动容器:
docker-compose up -d
原因说明
- Bitnami容器的启动脚本会初始化配置目录下的文件,挂载整个
/opt/bitnami/php/etc目录会覆盖容器内原有的依赖配置文件(如common.conf.disabled),导致启动脚本执行失败。 - 挂载整个
/opt目录会直接覆盖容器内的核心启动脚本(如/opt/bitnami/scripts/moodle/entrypoint.sh),容器找不到启动入口自然无法启动。 - 单个文件挂载只会替换目标配置文件,不会影响容器内其他必要文件,是修改单配置文件的正确方式。
内容的提问来源于stack exchange,提问作者Pida
相关产品推荐
相关产品推荐

