[2026-03-29 14:20:13.497] [Core] [INFO] [runners.tool_loop_agent_runner:698]: Agent 使用工具: ['astrbot_execute_shell']
[2026-03-29 14:20:13.498] [Core] [INFO] [runners.tool_loop_agent_runner:744]: 使用工具:astrbot_execute_shell,参数:{'command': 'echo "Alive?" && date'}
[2026-03-29 14:20:13.499] [Core] [INFO] [computer.computer_client:452]: [Computer] Initializing booter: type=shipyard_neo, session=OnerAssitant:FriendMessage:5C22D3E4A98A1160BF1F741F2D8B34E9
[2026-03-29 14:20:13.503] [Core] [INFO] [computer.computer_client:478]: [Computer] Shipyard Neo config: endpoint=http://mc.slexce.cn:8114, profile=python-default, ttl=3600
[2026-03-29 14:20:13.569] [Core] [INFO] [booters.shipyard_neo:419]: [Computer] Auto-selected profile browser-python (capabilities=['browser', 'filesystem', 'python', 'shell'])
[2026-03-29 14:20:13.601] [Core] [INFO] [booters.shipyard_neo:364]: Got Shipyard Neo sandbox: sandbox-7179cfd5816b (profile=browser-python, capabilities=['browser', 'filesystem', 'python', 'shell'], auto=False)
[2026-03-29 14:20:13.602] [Core] [INFO] [computer.computer_client:496]: [Computer] Sandbox booted successfully: type=shipyard_neo, session=OnerAssitant:FriendMessage:5C22D3E4A98A1160BF1F741F2D8B34E9
[2026-03-29 14:20:13.606] [Core] [INFO] [computer.computer_client:401]: Uploading skills bundle to sandbox...
[2026-03-29 14:20:53.607] [Core] [ERRO] [v4.22.2] [computer.computer_client:501]: Error booting sandbox for session OnerAssitant:FriendMessage:5C22D3E4A98A1160BF1F741F2D8B34E9:
[2026-03-29 14:20:53.611] [Core] [WARN] [v4.22.2] [runners.tool_loop_agent_runner:902]: Traceback (most recent call last):
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 101, in map_httpcore_exceptions
yield
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 394, in handle_async_request
resp = await self._pool.handle_async_request(req)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 256, in handle_async_request
raise exc from None
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 236, in handle_async_request
response = await connection.handle_async_request(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 103, in handle_async_request
return await self._connection.handle_async_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpcore/_async/http11.py", line 136, in handle_async_request
raise exc
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpcore/_async/http11.py", line 106, in handle_async_request
) = await self._receive_response_headers(**kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpcore/_async/http11.py", line 177, in _receive_response_headers
event = await self._receive_event(timeout=timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpcore/_async/http11.py", line 217, in _receive_event
data = await self._network_stream.read(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpcore/_backends/anyio.py", line 32, in read
with map_exceptions(exc_map):
^^^^^^^^^^^^^^^^^^^^^^^
File "/root/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 158, in __exit__
self.gen.throw(value)
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions
raise to_exc(exc) from exc
httpcore.ReadTimeout
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/root/AstrBot/AstrBot/astrbot/core/agent/runners/tool_loop_agent_runner.py", line 798, in _handle_function_tools
async for resp in self._iter_tool_executor_results(executor): # type: ignore
File "/root/AstrBot/AstrBot/astrbot/core/agent/runners/tool_loop_agent_runner.py", line 1139, in _iter_tool_executor_results
yield next_result_task.result()
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/astrbot/core/astr_agent_tool_exec.py", line 175, in execute
async for r in cls._execute_local(tool, run_context, **tool_args):
File "/root/AstrBot/AstrBot/astrbot/core/astr_agent_tool_exec.py", line 597, in _execute_local
resp = await asyncio.wait_for(
^^^^^^^^^^^^^^^^^^^^^^^
File "/root/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/asyncio/tasks.py", line 520, in wait_for
return await fut
^^^^^^^^^
File "/root/AstrBot/AstrBot/astrbot/core/astr_agent_tool_exec.py", line 738, in call_local_llm_tool
ret = await ready_to_call
^^^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/astrbot/core/computer/tools/shell.py", line 56, in call
sb = await get_booter(
^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/astrbot/core/computer/computer_client.py", line 502, in get_booter
raise e
File "/root/AstrBot/AstrBot/astrbot/core/computer/computer_client.py", line 499, in get_booter
await _sync_skills_to_sandbox(client)
File "/root/AstrBot/AstrBot/astrbot/core/computer/computer_client.py", line 402, in _sync_skills_to_sandbox
await booter.shell.exec(f"mkdir -p {SANDBOX_SKILLS_ROOT}")
File "/root/AstrBot/AstrBot/astrbot/core/computer/booters/shipyard_neo.py", line 100, in exec
result = await self._sandbox.shell.exec(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/shipyard_neo/capabilities/shell.py", line 55, in exec
response = await self._http.post(
^^^^^^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/shipyard_neo/_http.py", line 225, in post
return await self.request(
^^^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/shipyard_neo/_http.py", line 170, in request
response = await self.client.request(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1540, in request
return await self.send(request, auth=auth, follow_redirects=follow_redirects)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1629, in send
response = await self._send_handling_auth(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1657, in _send_handling_auth
response = await self._send_handling_redirects(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1694, in _send_handling_redirects
response = await self._send_single_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1730, in _send_single_request
response = await transport.handle_async_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 393, in handle_async_request
with map_httpcore_exceptions():
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/root/.local/share/uv/python/cpython-3.12.13-linux-x86_64-gnu/lib/python3.12/contextlib.py", line 158, in __exit__
self.gen.throw(value)
File "/root/AstrBot/AstrBot/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 118, in map_httpcore_exceptions
raise mapped_exc(message) from exc
httpx.ReadTimeout
[2026-03-29 14:20:53.612] [Core] [INFO] [runners.tool_loop_agent_runner:925]: Tool `astrbot_execute_shell` Result: error:
root@enjoyMcgame:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7388cf218819 ghcr.io/astrbotdevs/shipyard-neo-gull:latest "/app/entrypoint.sh …" About a minute ago Up About a minute 8115/tcp bay-sess-6c72693bce2b-browser
b3a2ca4e7e33 ghcr.io/astrbotdevs/shipyard-neo-ship:latest "/app/entrypoint.sh …" About a minute ago Up About a minute 8123/tcp bay-sess-6c72693bce2b-ship
7f6fb1fff952 ghcr.io/astrbotdevs/shipyard-neo-ship:latest "/app/entrypoint.sh …" 9 minutes ago Up 9 minutes 8123/tcp bay-session-sess-f088e5791f17
628bad20b66c ghcr.io/astrbotdevs/shipyard-neo-ship:latest "/app/entrypoint.sh …" 2 hours ago Up 2 hours 8123/tcp bay-session-sess-502668e436f6
64c5edccdb45 ghcr.io/astrbotdevs/shipyard-neo-bay:latest "uvicorn app.main:ap…" 2 hours ago Up 2 hours (healthy) 0.0.0.0:8114->8114/tcp, [::]:8114->8114/tcp bay
root@enjoyMcgame:~# docker network ls
NETWORK ID NAME DRIVER SCOPE
edc536cee085 bay-network bridge local
958c256f7ad2 bay_net_sess-6c72693bce2b bridge local
98ac9a0e49e9 bay_net_sess-ae001f87b1c9 bridge local
5fe2da753fdb bridge bridge local
9bf08dddb621 host host local
4e9cf67627b9 none null local
root@enjoyMcgame:~#
What happened / 发生了什么
调用sandbox 时 Error booting sandbox for session
服务器能相互访问,但是不知道为什么http超时了
Reproduce / 如何复现?
调用sandbox执行时出错
AstrBot version, deployment method (e.g., Windows Docker Desktop deployment), provider used, and messaging platform used. / AstrBot 版本、部署方式(如 Windows Docker Desktop 部署)、使用的提供商、使用的消息平台适配器
AstrBot和sandbox部署在不同云服务商的服务器上,能够相互访问。
AstrBot手动部署
sandbox为docker部署
OS
Linux
Logs / 报错日志
AstrBot日志如下
sandbox容器如下:
bay容器运行日志如下
···
INFO: 127.0.0.1:56412 - "GET /health HTTP/1.1" 200 OK
2026-03-29 06:40:51 [info ] gc.cycle.start service=gc_scheduler
2026-03-29 06:40:51 [info ] gc.task.start service=gc_scheduler task=idle_session
2026-03-29 06:40:51 [info ] gc.idle_session.found count=0 gc_task=idle_session
2026-03-29 06:40:51 [info ] gc.task.complete cleaned=0 errors=0 service=gc_scheduler skipped=0 task=idle_session
2026-03-29 06:40:51 [info ] gc.task.start service=gc_scheduler task=expired_sandbox
2026-03-29 06:40:51 [info ] gc.expired_sandbox.found count=0 gc_task=expired_sandbox
2026-03-29 06:40:51 [info ] gc.task.complete cleaned=0 errors=0 service=gc_scheduler skipped=0 task=expired_sandbox
2026-03-29 06:40:51 [info ] gc.task.start service=gc_scheduler task=orphan_cargo
2026-03-29 06:40:51 [info ] gc.orphan_cargo.found count=0 gc_task=orphan_cargo
2026-03-29 06:40:51 [info ] gc.task.complete cleaned=0 errors=0 service=gc_scheduler skipped=0 task=orphan_cargo
2026-03-29 06:40:51 [info ] gc.task.start service=gc_scheduler task=orphan_container
2026-03-29 06:40:51 [info ] gc.orphan_container.discovery.start filter_labels={'bay.managed': 'true', 'bay.instance_id': 'bay-prod'} gc_task=orphan_container instance_id=bay-prod
2026-03-29 06:40:51 [debug ] docker.list_runtime_instances driver=docker filters={'label': ['bay.managed=true', 'bay.instance_id=bay-prod']}
2026-03-29 06:40:51 [info ] skills.browser.learning.cycle_complete candidates=0 errored=0 processed=0 promoted_canary=0 promoted_stable=0 rolled_back=0 service=browser_learning_scheduler skipped=0
2026-03-29 06:40:51 [debug ] docker.list_runtime_instances.result count=1 driver=docker
2026-03-29 06:40:51 [info ] gc.orphan_container.discovery.complete count=1 gc_task=orphan_container
2026-03-29 06:40:51 [debug ] gc.orphan_container.skip.session_exists gc_task=orphan_container instance_id=95982ed5166c5d422c38e0f9da3f8f8a37eea3c25e550d8559fbfb2a82aa54c3 instance_name=bay-session-sess-502668e436f6 session_id=sess-502668e436f6
2026-03-29 06:40:51 [info ] gc.task.complete cleaned=0 errors=0 service=gc_scheduler skipped=1 task=orphan_container
2026-03-29 06:40:51 [info ] gc.cycle.complete service=gc_scheduler total_cleaned=0 total_errors=0
2026-03-29 06:40:51 [info ] warm_pool.cycle.start profiles=3 service=warm_pool_scheduler
2026-03-29 06:40:51 [debug ] warm_pool.profile_check available=0 pending=1 profile_id=python-default service=warm_pool_scheduler target=1
2026-03-29 06:40:51 [debug ] warm_pool.runtime_probe_result container_id=95982ed5166c5d422c38e0f9da3f8f8a37eea3c25e550d8559fbfb2a82aa54c3 discovered_status=running healthy=True mode=single service=warm_pool_scheduler session_id=sess-502668e436f6
2026-03-29 06:40:51 [debug ] warm_pool.runtime_state_healthy current_session_id=sess-502668e436f6 profile_id=python-data sandbox_id=sandbox-018220827f40 service=warm_pool_scheduler session_id=sess-502668e436f6 warm_state=available
2026-03-29 06:40:51 [debug ] warm_pool.profile_check available=1 pending=0 profile_id=python-data service=warm_pool_scheduler target=1
2026-03-29 06:40:51 [debug ] warm_pool.profile_check available=0 pending=1 profile_id=browser-python service=warm_pool_scheduler target=1
2026-03-29 06:40:51 [info ] warm_pool.cycle.complete profiles={'python-default': 0, 'python-data': 0, 'browser-python': 0} service=warm_pool_scheduler total_created=0
INFO: 127.0.0.1:33370 - "GET /health HTTP/1.1" 200 OK
INFO: 39.99.155.101:45536 - "GET /v1/profiles HTTP/1.1" 200 OK
2026-03-29 06:41:14 [debug ] auth.success owner=default source=db
2026-03-29 06:41:14 [debug ] sandbox.create.warm_claim_miss profile=browser-python
2026-03-29 06:41:14 [info ] sandbox.create manager=sandbox owner=default profile_id=browser-python sandbox_id=sandbox-8c4c405f533f
2026-03-29 06:41:14 [info ] cargo.create cargo_id=ws-f4683401b78e managed=True manager=cargo owner=default
2026-03-29 06:41:14 [info ] docker.create_volume driver=docker name=bay-cargo-ws-f4683401b78e
2026-03-29 06:41:14 [debug ] warmup_queue.enqueued depth=1 sandbox_id=sandbox-8c4c405f533f service=warmup_queue
2026-03-29 06:41:14 [debug ] warmup_worker.processing owner=default sandbox_id=sandbox-8c4c405f533f service=warmup_queue worker_id=1
INFO: 39.99.155.101:45536 - "POST /v1/sandboxes HTTP/1.1" 201 Created
2026-03-29 06:41:14 [info ] warmup_worker.ensure_running.start current_session_id=None is_warm_pool=False owner=default profile_id=browser-python sandbox_id=sandbox-8c4c405f533f service=warmup_queue warm_state=None worker_id=1
2026-03-29 06:41:14 [info ] session.create manager=session profile_id=browser-python sandbox_id=sandbox-8c4c405f533f session_id=sess-5fd5cabafb62
2026-03-29 06:41:14 [info ] session.ensure_running container_count=2 desired_state=pending has_containers=False has_endpoint=False manager=session observed_state=pending profile_id=browser-python sandbox_id=sandbox-8c4c405f533f session_id=sess-5fd5cabafb62
2026-03-29 06:41:14 [info ] docker.create_session_network driver=docker network_name=bay_net_sess-5fd5cabafb62 session_id=sess-5fd5cabafb62
2026-03-29 06:41:14 [debug ] auth.success owner=default source=db
2026-03-29 06:41:14 [info ] docker.session_network_created driver=docker network_name=bay_net_sess-5fd5cabafb62
2026-03-29 06:41:14 [info ] docker.create_multi bay_network=bay-network container_count=2 driver=docker network=bay_net_sess-5fd5cabafb62 session_id=sess-5fd5cabafb62
2026-03-29 06:41:14 [debug ] docker.image.exists_locally driver=docker image=ghcr.io/astrbotdevs/shipyard-neo-ship:latest
2026-03-29 06:41:14 [info ] docker.create_multi.container container_name=bay-sess-5fd5cabafb62-ship driver=docker image=ghcr.io/astrbotdevs/shipyard-neo-ship:latest runtime_type=ship session_id=sess-5fd5cabafb62
2026-03-29 06:41:14 [debug ] docker.create_multi.connected_bay_network bay_network=bay-network container_name=bay-sess-5fd5cabafb62-ship driver=docker
2026-03-29 06:41:14 [debug ] docker.image.exists_locally driver=docker image=ghcr.io/astrbotdevs/shipyard-neo-gull:latest
2026-03-29 06:41:14 [info ] docker.create_multi.container container_name=bay-sess-5fd5cabafb62-browser driver=docker image=ghcr.io/astrbotdevs/shipyard-neo-gull:latest runtime_type=gull session_id=sess-5fd5cabafb62
2026-03-29 06:41:14 [debug ] docker.create_multi.connected_bay_network bay_network=bay-network container_name=bay-sess-5fd5cabafb62-browser driver=docker
2026-03-29 06:41:14 [info ] docker.create_multi.done created=['ship', 'browser'] driver=docker session_id=sess-5fd5cabafb62
2026-03-29 06:41:14 [info ] docker.start_multi container_names=['ship', 'browser'] driver=docker
2026-03-29 06:41:14 [info ] docker.start_multi.container_started container_id=e6375a36e181b7b1c6103bb66ac8e2a834eec4181b9172ffa7cfa3503ddc711a container_name=ship driver=docker endpoint=http://172.18.0.4:8123
2026-03-29 06:41:14 [info ] docker.start_multi.container_started container_id=68316b4e8327b10dd0560d6e7c109c7c19d073525fccde519f50043d42365c12 container_name=browser driver=docker endpoint=http://172.18.0.5:8115
2026-03-29 06:41:14 [info ] docker.start_multi.done driver=docker started=['ship', 'browser']
2026-03-29 06:41:21 [info ] warm_pool.cycle.start profiles=3 service=warm_pool_scheduler
2026-03-29 06:41:21 [debug ] warm_pool.profile_check available=0 pending=1 profile_id=python-default service=warm_pool_scheduler target=1
2026-03-29 06:41:21 [debug ] warm_pool.runtime_probe_result container_id=95982ed5166c5d422c38e0f9da3f8f8a37eea3c25e550d8559fbfb2a82aa54c3 discovered_status=running healthy=True mode=single service=warm_pool_scheduler session_id=sess-502668e436f6
2026-03-29 06:41:21 [debug ] warm_pool.runtime_state_healthy current_session_id=sess-502668e436f6 profile_id=python-data sandbox_id=sandbox-018220827f40 service=warm_pool_scheduler session_id=sess-502668e436f6 warm_state=available
2026-03-29 06:41:21 [debug ] warm_pool.profile_check available=1 pending=0 profile_id=python-data service=warm_pool_scheduler target=1
2026-03-29 06:41:21 [debug ] warm_pool.profile_check available=0 pending=1 profile_id=browser-python service=warm_pool_scheduler target=1
2026-03-29 06:41:21 [info ] warm_pool.cycle.complete profiles={'python-default': 0, 'python-data': 0, 'browser-python': 0} service=warm_pool_scheduler total_created=0
INFO: 127.0.0.1:40328 - "GET /health HTTP/1.1" 200 OK
2026-03-29 06:41:51 [info ] warm_pool.cycle.start profiles=3 service=warm_pool_scheduler
2026-03-29 06:41:51 [debug ] warm_pool.profile_check available=0 pending=1 profile_id=python-default service=warm_pool_scheduler target=1
2026-03-29 06:41:51 [debug ] warm_pool.runtime_probe_result container_id=95982ed5166c5d422c38e0f9da3f8f8a37eea3c25e550d8559fbfb2a82aa54c3 discovered_status=running healthy=True mode=single service=warm_pool_scheduler session_id=sess-502668e436f6
2026-03-29 06:41:51 [debug ] warm_pool.runtime_state_healthy current_session_id=sess-502668e436f6 profile_id=python-data sandbox_id=sandbox-018220827f40 service=warm_pool_scheduler session_id=sess-502668e436f6 warm_state=available
2026-03-29 06:41:51 [debug ] warm_pool.profile_check available=1 pending=0 profile_id=python-data service=warm_pool_scheduler target=1
2026-03-29 06:41:51 [debug ] warm_pool.profile_check available=0 pending=1 profile_id=browser-python service=warm_pool_scheduler target=1
2026-03-29 06:41:51 [info ] warm_pool.cycle.complete profiles={'python-default': 0, 'python-data': 0, 'browser-python': 0} service=warm_pool_scheduler total_created=0
INFO: 127.0.0.1:52878 - "GET /health HTTP/1.1" 200 OK
···
Are you willing to submit a PR? / 你愿意提交 PR 吗?
Code of Conduct