macOS下Docker Compose启动容器时挂载路径权限错误求助
问题描述
运行环境:macOS 13.3.1 (22E261)
相关配置文件如下:
apache.Dockerfile
FROM php:8.2-apache-bullseye RUN set -eux; \ apt-get update && apt-get install -y \ vim \ zip \ procps \ locales \ libpq-dev \ lsb-release \ libicu-dev \ iproute2 \ unzip \ iputils-ping && \ docker-php-ext-install intl pdo pgsql pdo_pgsql && \ mkdir /tmp/host/ COPY ./vhosts/*.conf /etc/apache2/sites-available/ RUN cd /etc/apache2/sites-available/ && a2ensite * && \ a2enmod rewrite && \ apachectl configtest && \ service apache2 restart USER root
docker-compose.yaml
version: '3.2' services: apache_php8.2: build: context: . dockerfile: ./apache.Dockerfile container_name: ${APACHE_CONTAINER_NAME} ports: - target: 80 # the port inside the container published: 81 # the publicly exposed port protocol: tcp # the port protocol (tcp or udp) mode: host extra_hosts: - "host.docker.internal:host-gateway" networks: - local_docker_network volumes: - ${APACHE_DOCUMENT_ROOT}:/var/www/ - ${HOST_TRANSFER_DIRECTORY}:/tmp/host/ networks: local_docker_network: driver: bridge
.env
APACHE_DOCUMENT_ROOT="/Users/jirka/Sites/" HOST_TRANSFER_DIRECTORY="/Users/jirka/tmp/" APACHE_CONTAINER_NAME="apache_php8.2" COMPOSE_PROJECT_NAME="localdev"
执行docker container start 5d4ae59ee339时触发错误:
Error response from daemon: error while creating mount source path '/host_mnt/Users/jirka/tmp': mkdir /host_mnt/Users/jirka: operation not permitted Error: failed to start containers: 5d4ae59ee339
已尝试重启Docker daemon等常规方案,无效,需解决该挂载权限问题。
解决方案
检查Docker文件共享权限
打开Docker Desktop偏好设置 -> 资源 -> 文件共享,确认/Users/jirka(或整个/Users目录)已被添加到共享列表且勾选状态正常。若未添加,点击"+"选择对应目录,应用并重启Docker。修复本地目录权限
对挂载目录执行权限修复命令:sudo chown -R jirka:staff /Users/jirka/tmp/ sudo chmod -R 755 /Users/jirka/tmp/确保目录所属用户组与当前登录用户一致,保证Docker有足够访问权限。
移除.env中的路径引号
当前.env文件中路径包含双引号,可能导致Docker解析出错。修改.env文件为:APACHE_DOCUMENT_ROOT=/Users/jirka/Sites/ HOST_TRANSFER_DIRECTORY=/Users/jirka/tmp/ APACHE_CONTAINER_NAME=apache_php8.2 COMPOSE_PROJECT_NAME=localdev保存后重新构建启动容器:
docker-compose down docker-compose build --no-cache docker-compose up -d重置Docker文件共享缓存
- 打开Docker Desktop偏好设置 -> 资源 -> 文件共享,移除所有已共享目录,应用并重启Docker。
- 重启后重新添加
/Users目录,再次应用并重启Docker。
检查系统完整性保护(SIP)状态
执行命令查看SIP状态:csrutil status若SIP开启且上述方案无效,可临时关闭SIP(需重启进入恢复模式):
- 重启Mac,按住Command+R进入恢复模式。
- 打开终端执行
csrutil disable,重启系统。 - 测试容器启动,问题解决后建议重新开启SIP(执行
csrutil enable)。
内容的提问来源于stack exchange,提问作者jnemecz
相关产品推荐
相关产品推荐

