封装成开箱即用的docker

封装成开箱即用的docker

创建 Dockerfile文件

复制代码
FROM registry.cn-beijing.aliyuncs.com/bladeai/multi-agent-backend-base:latest

WORKDIR /app
USER root

# 合并所有系统依赖和 Chrome 安装
RUN apt-get update && apt-get install -y \
    wget \
    gnupg \
    libx11-6 \
    libxcomposite1 \
    libasound2t64 \
    fonts-liberation \
    libu2f-udev \
    libvulkan1 \
    --no-install-recommends \
    && wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
    && apt-get install -y ./google-chrome-stable_current_amd64.deb --no-install-recommends \
    && rm google-chrome-stable_current_amd64.deb \
    && rm -rf /var/lib/apt/lists/*

# 后续步骤保持不变
COPY pyproject.toml uv.lock ./
RUN uv sync --no-cache --no-dev

COPY . .

ENV PATH="/app/.venv/bin:$PATH"
ENV CHROME_PATH="/usr/bin/google-chrome"

EXPOSE 8000

CMD ["uv", "run", "main.py"]

构建docker

复制代码
docker build -t common-research-browser:v1 .

查看已经创建的 docker 镜像

复制代码
docker images

warning02@Admin:/mnt/d/workspace/multi-agent$ docker images
REPOSITORY                                                          TAG       IMAGE ID       CREATED          SIZE
common-research-browser                                             v1        e744dae715e9   19 minutes ago   3.12GB
common-research-browser                                             v2        e744dae715e9   19 minutes ago   3.12GB
mcr.microsoft.com/playwright/mcp                                    latest    d5f30c953ff6   2 weeks ago      972MB
registry.cn-beijing.aliyuncs.com/bladeai/multi-agent-backend-base   latest    a904b4cca9bc   6 weeks ago      1.03GB

测试运行docker

复制代码
docker run -it --name test_browser common-research-browser:v1 /bin/bash

输入 exit 退出 docker

复制代码
exit

正式启动multi-agent的服务

复制代码
docker run -d -p 8000:8000 --name research_agent common-research-browser:v1

warning02@Admin:/mnt/d/workspace/multi-agent$ docker run -d -p 8000:8000 --name research_agent common-research-browser:v2
c9b545b505096920c93e458da3c0f499347a78a290343d774adae6531f127703

启动multi-agent的服务,同时将主机的显示接口X11挂载到容器里

bash 复制代码
docker run -d \
  -p 8000:8000 \
  --name common_research \
  -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  common-research-browser:v1

端口映射会被警告,直接使用主机网络(--net=host),并且给予容器更高的权限以解决部分资源访问受限等限制(--privileged)

bash 复制代码
docker run -d \
  --name common_research \
  --privileged \
  --net=host \
  -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  common-research-browser:v1

报错说这个名字的容器已经被 id 为 xxx 的容器使用了

bash 复制代码
warning02@Admin:/mnt/d/workspace/multi-agent$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
warning02@Admin:/mnt/d/workspace/multi-agent$ docker run -d -p 8000:8000 --name research_agent common-research-browser:v1
docker: Error response from daemon: Conflict. The container name "/research_agent" is already in use by container "7e13b2c08321ee53f0819fd2a9df6db26724dfd5d32e46097cc10ae9b8a3f26e". You have to remove (or rename) that container to be able to reuse that name.

Run 'docker run --help' for more information

执行 docker ps -a 指令,查看所有容器(包括运行的和没运行的)

bash 复制代码
warning02@Admin:/mnt/d/workspace/multi-agent$ docker ps -a
CONTAINER ID   IMAGE                        COMMAND            CREATED        STATUS                      PORTS     NAMES
fd67c10ed030   common-research-browser:v1   "uv run main.py"   15 hours ago   Exited (143) 15 hours ago             research_agent_gui

之前已经创建有了,那么,直接使用现有容器

复制代码
docker start research_agent

如果终端返回容器名,说明容器已经重新启动了

bash 复制代码
warning02@Admin:/mnt/d/workspace/multi-agent$ docker start research_agent
research_agent
warning02@Admin:/mnt/d/workspace/multi-agent$ docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED        STATUS          PORTS                                         NAMES
7e13b2c08321   common-research-browser:v1   "uvicorn server.app:..."   16 hours ago   Up 33 seconds   0.0.0.0:8000->8000/tcp, [::]:8000->8000/tcp   research_agent

若想进入容器的终端,执行 docker exec 指令

复制代码
docker exec -it research_agent /bin/bash

输入 exit 退出,没有看到uv run main.py 跑的服务输出的日志,但是 uv run main.py 跑的服务其实仍在进行

输入 docker logs 查看跑的容器中的服务日志

bash 复制代码
warning02@Admin:/mnt/d/workspace/multi-agent$ docker logs -f research_agent
Downloading jedi (1.5MiB)
Downloading pyright (5.7MiB)
Downloading debugpy (4.0MiB)
 Downloaded jedi
 Downloaded debugpy
 Downloaded pyright
Installed 28 packages in 567ms
[02/03/26 03:05:58] INFO     日志系统已初始化               custom_logger.py:185
[02/03/26 03:06:01] INFO     Loading config from:                   config.py:24
                             /app/server/configs/config.conf
                    INFO     Loading model config from:             config.py:25
                             /app/server/configs/models.yaml

按 ctrl + c 停止查看日志,但不会停止服务

通过 docker cp 将宿主机的文件,移动到 docker 容器中

复制代码
docker cp start_chrome.py common_research:/app/agent_templates/common_research_browser
bash 复制代码
warning02@Admin:/mnt/d/workspace/multi-agent/agent_templates/common_research_browser$ docker cp start_chrome.py common_research:/app/agent_templates/common_research_browser
Successfully copied 6.66kB to common_research:/app/agent_templates/common_research_browser

docker stop 停止之前容器中启动的服务

复制代码
docker stop common_research

warning02@Admin:/mnt/d/workspace/multi-agent$ docker stop common_research
common_research

删除之前停止的容器

复制代码
docker rm -f research_agent test_browser

warning02@Admin:/mnt/d/workspace/multi-agent$ docker rm -f research_agent test_browser
research_agent
test_browser

删除之前构建的镜像(先删除使用这些镜像的容器,再删除这些镜像)

复制代码
docker rmi common-research-browser:v1 common-research-browser:v2
相关推荐
还在忙碌的吴小二2 小时前
k8s是啥?
云原生·容器·kubernetes
爱丽_2 小时前
Docker 从原理到项目落地(镜像 / 容器 / 网络 / 卷 / Dockerfile)
网络·docker·容器
zhen243 小时前
K8s Service
云原生·容器·kubernetes
janthinasnail3 小时前
Docker镜像源加速器
docker·docker镜像源
我爱学习好爱好爱5 小时前
Kubernetes 1.29集群上部署Java网站项目
java·容器·kubernetes
执笔为剑5 小时前
1.2、docker环境部署
运维·docker·容器
qhqh3106 小时前
K8S的PV、PVC和storageClass的相关概念及实验
云原生·容器·kubernetes
春日见7 小时前
端到端大模型自动驾驶
java·开发语言·驱动开发·docker·自动驾驶·计算机外设
中国IT7 小时前
第3章:Docker与传统虚拟化比较
运维·docker·容器