使用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,确保本地
localstack_data目录存在且无冲突 - 停止并删除旧容器:
docker-compose down - 重新启动容器:
docker-compose up -d - 查看容器日志确认启动成功:
docker logs localstack_main
内容的提问来源于stack exchange,提问作者Shubham
相关产品推荐
相关产品推荐

