MacOS Ventura下docker-compose up连接拒绝错误求助
问题描述
我使用MacOS Ventura系统,多次重装Docker与docker-compose,也重启过系统排查zshrc路径问题,但在应用目录执行docker-compose up --build时始终出现连接拒绝错误。
报错信息
Traceback (most recent call last): File "urllib3/connectionpool.py", line 677, in urlopen File "urllib3/connectionpool.py", line 392, in _make_request File "http/client.py", line 1277, in request File "http/client.py", line 1323, in _send_request File "http/client.py", line 1272, in endheaders File "http/client.py", line 1032, in _send_output File "http/client.py", line 972, in send File "docker/transport/unixconn.py", line 43, in connect ConnectionRefusedError: [Errno 111] Connection refused During handling of the above exception, another exception occurred: Traceback (most recent call last): File "requests/adapters.py", line 449, in send File "urllib3/connectionpool.py", line 727, in urlopen File "urllib3/util/retry.py", line 410, in increment File "urllib3/packages/six.py", line 734, in reraise File "urllib3/connectionpool.py", line 677, in urlopen File "urllib3/connectionpool.py", line 392, in _make_request File "http/client.py", line 1277, in request File "http/client.py", line 1323, in _send_request File "http/client.py", line 1272, in endheaders File "http/client.py", line 1032, in _send_output File "http/client.py", line 972, in send File "docker/transport/unixconn.py", line 43, in connect urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionRefusedError(111, 'Connection refused')) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "docker/api/client.py", line 214, in _retrieve_server_version File "docker/api/daemon.py", line 181, in version File "docker/utils/decorators.py", line 46, in inner File "docker/api/client.py", line 237, in _get File "requests/sessions.py", line 543, in get File "requests/sessions.py", line 530, in request File "requests/sessions.py", line 643, in send File "requests/adapters.py", line 498, in send requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionRefusedError(111, 'Connection refused')) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "docker-compose", line 3, in <module> File "compose/cli/main.py", line 81, in main File "compose/cli/main.py", line 200, in perform_command File "compose/cli/command.py", line 70, in project_from_options File "compose/cli/command.py", line 153, in get_project File "compose/cli/docker_client.py", line 43, in get_client File "compose/cli/docker_client.py", line 170, in docker_client File "docker/api/client.py", line 197, in __init__ File "docker/api/client.py", line 222, in _retrieve_server_version docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', ConnectionRefusedError(111, 'Connection refused')) [9] Failed to execute script docker-compose
环境版本
- Docker版本:
Docker version 24.0.7, build afdd53b4e3
- docker-compose版本:
docker-compose version 1.29.2, build 5becea4
Dockerfile
FROM python:3.11-alpine WORKDIR /app RUN apk add --no-cache gcc musl-dev linux-headers RUN apk add --update --no-cache --virtual .tmp-build-deps \ gcc libc-dev linux-headers postgresql-dev \ && apk add libffi-dev RUN pip install poetry COPY pyproject.toml poetry.lock ./ RUN poetry config virtualenvs.create false \ && poetry install --no-dev --no-interaction --no-ansi COPY . /app ENV FLASK_APP=app EXPOSE 8000 CMD ["python", "app.py"]
docker-compose配置
version: '3.9' services: web: build: context: . dockerfile: Dockerfile ports: - "8000:8000" depends_on: - mongodb - rabbitmq - nginx environment: - CELERY_BROKER_URL=${CELERY_BROKER_URL} - MONGO_URI=mongodb://${MONGO_INITDB_ROOT_USERNAME}:${MONGO_INITDB_ROOT_PASSWORD}@mongodb:27017/ - MONGO_DB=${MONGO_DB} - TIMEZONE=${TIMEZONE} nginx: image: nginx:1.25-alpine ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro mongodb: image: mongo:4.2.3-bionic ports: - "27017:27017" environment: - MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME} - MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD} volumes: - ./db/seed.js:/docker-entrypoint-initdb.d/seed.js:ro - mongodb_data:/data/db mongo-express: image: mongo-express:1-20-alpine3.18 ports: - "8081:8081" environment: - ME_CONFIG_MONGODB_ADMINUSERNAME=${ME_CONFIG_MONGODB_ADMINUSERNAME} - ME_CONFIG_MONGODB_ADMINPASSWORD=${ME_CONFIG_MONGODB_ADMINPASSWORD} - ME_CONFIG_MONGODB_SERVER=mongodb - ME_CONFIG_MONGODB_ENABLE_ADMIN=true - ME_CONFIG_BASICAUTH_USERNAME=${ME_CONFIG_BASICAUTH_USERNAME} - ME_CONFIG_BASICAUTH_PASSWORD=${ME_CONFIG_BASICAUTH_PASSWORD} depends_on: - mongodb rabbitmq: image: rabbitmq:management container_name: rabbitmq restart: always environment: - RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER} - RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS} - RABBITMQ_DEFAULT_VHOST=/ ports: - 5672:5672 - 15672:15672 volumes: - rabbitmq_data:/var/lib/rabbitmq celery-worker: build: context: . restart: always environment: - CELERY_BROKER_URL=amqp://admin:admin@rabbitmq:5672 - MONGO_DB={MONGO_DB} command: celery -A app.adapters.queue.celery_consumer worker --loglevel=info depends_on: - rabbitmq volumes: mongodb_data: rabbitmq_data:
解决方案
该错误核心是docker-compose无法连接到Docker守护进程,按以下步骤排查修复:
确认Docker Desktop处于运行状态
Mac系统下Docker守护进程依赖Docker Desktop应用启动,直接命令行无法启动。打开Launchpad启动Docker,等待状态栏鲸鱼图标显示"Running"后,再执行相关命令。检查用户Docker组权限
执行groups命令查看当前用户是否在docker组内,若没有则执行:sudo usermod -aG docker $USER重新登录终端或重启系统后生效。
验证Docker守护进程连接可用性
先执行docker ps测试基础连接:- 若同样报错,打开Docker Desktop的
Settings > Advanced,确认"Allow the default Docker socket to be used"已勾选。 - 检查环境变量是否异常:执行
echo $DOCKER_HOST,若输出不是空或unix:///var/run/docker.sock,执行unset DOCKER_HOST后重试。
- 若同样报错,打开Docker Desktop的
修复版本兼容性问题
你使用的docker-compose 1.29.2版本较旧,与Docker 24.0.7存在兼容性风险:- 卸载旧版docker-compose:
sudo rm /usr/local/bin/docker-compose - 使用Docker Desktop内置的
docker compose(注意是空格而非连字符)替代,执行docker compose up --build即可自动匹配版本。
- 卸载旧版docker-compose:
清理Docker残留文件后重装
多次重装可能残留无效配置:- 打开Docker Desktop >
Settings > Troubleshoot > Uninstall完成彻底卸载 - 删除残留文件:
rm -rf ~/.docker sudo rm -rf /Library/Application\ Support/com.docker.docker sudo rm -rf /var/run/docker.sock - 重新安装Docker Desktop
- 打开Docker Desktop >
检查zshrc配置
打开~/.zshrc,删除错误的Docker环境变量配置(如错误设置的DOCKER_HOST或DOCKER_CERT_PATH),执行source ~/.zshrc使修改生效。
内容的提问来源于stack exchange,提问作者Louis
相关产品推荐
相关产品推荐

