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

在Docker容器内启动另一个容器遇docker-compose未找到问题求解决

问题:容器内通过脚本启动另一个容器失败,提示docker-compose未找到

我使用Dockerfile构建Docker镜像,通过docker-compose部署,希望在container-1中运行shell脚本以启动container-2。参考了两篇Stack Overflow相关帖子但未能解决问题,现提供相关配置文件及报错信息,求最简实现方案。

用户提供的配置文件

Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Backend/Backend.API.csproj", "Backend/"]
COPY ["BuildingBlock/CacheHandler/CacheHandler.csproj", "BuildingBlock/CacheHandler/"]
COPY ["Backend.Domain/Backend.Domain.csproj", "Backend.Domain/"]
RUN dotnet restore "Backend/Backend.API.csproj"
COPY . .
WORKDIR "/src/Backend"
RUN dotnet build "Backend.API.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Backend.API.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS install-docker-cli
RUN apt-get update && apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
RUN echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
RUN apt-get update && apt-get install -y docker-ce-cli

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
COPY --from=install-docker-cli /usr/bin/docker /usr/bin/docker
ENTRYPOINT ["dotnet", "Backend.API.dll"]

docker-compose配置

Backendbuild:
    context: .
    dockerfile: Dockerfile
volumes:
    - /var/run/docker.sock:/var/run/docker.sock

报错信息

line 11: docker-compose: command not found

最简解决方案

原因分析

报错核心是container-1的镜像里只安装了docker-ce-cli(Docker基础命令行工具),但缺少docker-compose工具,导致脚本调用时提示找不到命令。

方案1:安装docker-compose到镜像中

修改Dockerfile的install-docker-cli阶段新增docker-compose安装步骤,再复制到最终镜像:

# 原install-docker-cli阶段新增内容
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS install-docker-cli
RUN apt-get update && apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
RUN echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
RUN apt-get update && apt-get install -y docker-ce-cli
# 新增:下载并安装docker-compose
RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
RUN chmod +x /usr/local/bin/docker-compose

# 原final阶段新增复制docker-compose的步骤
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
COPY --from=install-docker-cli /usr/bin/docker /usr/bin/docker
# 新增:复制docker-compose到最终镜像
COPY --from=install-docker-cli /usr/local/bin/docker-compose /usr/local/bin/docker-compose
ENTRYPOINT ["dotnet", "Backend.API.dll"]

同时确保容器内用户有权限访问/var/run/docker.sock:若使用非root用户,需将其加入docker组;追求最简可直接以root用户运行容器(在docker-compose配置中添加user: root)。

方案2:改用docker run替代docker-compose(更简洁)

如果只是启动单个container-2,无需依赖docker-compose,直接在脚本中使用docker run命令:

docker run -d --name container-2 [你的镜像名称:标签]

这种方式无需修改Dockerfile安装docker-compose,仅保留原有的docker-ce-cli即可,镜像体积更小,实现更简单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:17:51