You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Docker Compose运行LocalStack SQS时容器启动失败,提示设备忙

解决LocalStack容器启动失败(Device or resource busy错误)

尝试通过Docker Compose运行LocalStack SQS进行应用测试时,容器无法启动,报错提示/tmp/localstack设备或资源忙,无法删除。

原Docker Compose配置

localstack:
  image: localstack/localstack
  container_name: localstack_main
  ports:
    - "4566:4566"
    - "4571:4571"
    - "8055:8080"
  environment:
    - SERVICES=sqs
    - DEBUG=1
    - DATA_DIR=/tmp/localstack/data
  volumes:
    - "./localstack_data:/tmp/localstack" # 挂载本地目录到容器的/tmp/localstack
    - "/var/run/docker.sock:/var/run/docker.sock"
#    tmpfs:
#      - /tmp/localstack:exec,mode=777

容器错误日志

LocalStack supervisor: starting
LocalStack supervisor: localstack process (PID 15) starting
ERROR: 'rm -rf "/tmp/localstack"': exit code 1; output: b"rm: cannot remove '/tmp/localstack': Device or resource busy\n"
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/opt/code/localstack/localstack/runtime/main.py", line 28, in <module>
    main()
  File "/opt/code/localstack/localstack/runtime/main.py", line 20, in main
    infra.start_infra(asynchronous=False)
  File "/opt/code/localstack/localstack/services/infra.py", line 220, in start_infra
    files.rm_rf(config.dirs.tmp)
  File "/opt/code/localstack/localstack/utils/files.py", line 214, in rm_rf
    shutil.rmtree(path)
  File "/usr/local/lib/python3.11/shutil.py", line 763, in rmtree
    onerror(os.rmdir, path, sys.exc_info())
  File "/usr/local/lib/python3.11/shutil.py", line 761, in rmtree
    os.rmdir(path, dir_fd=dir_fd)
OSError: [Errno 16] Device or resource busy: '/tmp/localstack'
LocalStack supervisor: localstack process (PID 15) returned with exit code 1
LocalStack supervisor: exiting

问题原因

LocalStack启动时会尝试清空/tmp/localstack目录,但你将本地目录直接挂载到了这个路径,挂载的目录处于设备忙状态,无法被删除,导致启动失败。

修复方案

方案1:调整挂载路径(推荐,支持数据持久化)

将本地目录挂载到/tmp/localstack/data(与DATA_DIR配置对应),而不是直接挂载到/tmp/localstack。修改后的Docker Compose配置如下:

localstack:
  image: localstack/localstack
  container_name: localstack_main
  ports:
    - "4566:4566"
    - "4571:4571"
    - "8055:8080"
  environment:
    - SERVICES=sqs
    - DEBUG=1
    - DATA_DIR=/tmp/localstack/data
  volumes:
    - "./localstack_data:/tmp/localstack/data" # 挂载到DATA_DIR指定的子目录
    - "/var/run/docker.sock:/var/run/docker.sock"

方案2:使用tmpfs(无需数据持久化时)

如果不需要持久化SQS数据,可以启用tmpfs配置,此时无需挂载本地目录。修改后的配置如下:

localstack:
  image: localstack/localstack
  container_name: localstack_main
  ports:
    - "4566:4566"
    - "4571:4571"
    - "8055:8080"
  environment:
    - SERVICES=sqs
    - DEBUG=1
    - DATA_DIR=/tmp/localstack/data
  volumes:
    - "/var/run/docker.sock:/var/run/docker.sock"
  tmpfs:
    - /tmp/localstack:exec,mode=777

验证操作

  1. 若使用方案1,确保本地localstack_data目录存在且无冲突
  2. 停止并删除旧容器:docker-compose down
  3. 重新启动容器:docker-compose up -d
  4. 查看容器日志确认启动成功:docker logs localstack_main

内容的提问来源于stack exchange,提问作者Shubham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:05:54