【问题标题】:Docker: How to use "docker/compose" container?Docker:如何使用“docker/compose”容器?
【发布时间】:2022-11-13 18:42:11
【问题描述】:

我想使用官方docker/compose container 在 Docker 容器中运行 Docker Compose。

我的Dockerfile 看起来像这样:

FROM docker/compose:latest
WORKDIR /
COPY ./docker-compose.yml .
COPY ./.env .
CMD [ "docker-compose", "up"]

运行docker build -t my-container . 有效。但运行 docker run --privileged my-container 失败:

> Couldn't connect to Docker daemon at http+docker://localhost - is it running?
>
> If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

我究竟做错了什么?我是否必须指定DOCKER_HOST,如果是,指定什么?

【问题讨论】:

  • 抱歉,我不知道有什么问题,但我很想知道在 docker 容器中运行 docker-compose 的意义何在。这意味着您在容器内创建容器?
  • 如果不让容器访问主机的 Docker 套接字,就无法运行它......此时,在不启动容器来启动容器的情况下直接运行 docker-compose 可能更容易。
  • @Peterrabbit 这是针对本地测试网络的。我有一个由 3 个容器组成的应用程序,我想在本地运行 4 个独立的应用程序实例。为了确保 4 个实例的封装,我认为将每个实例放入一个容器中是最简单的。

标签: docker docker-compose dockerfile


【解决方案1】:

我猜图像 docker/compose 用于构建 docker-compose 工具而不是在内部启动 docker。 它旨在供编辑 docker-compose 源代码的人使用。

但是,您可以使用 dind 图像(docker 中的 docker)。

【讨论】:

    【解决方案2】:

    尝试在dind(docker-in-docker)中安装docker-compose,如下所示:

    FROM docker:20.10-dind
    RUN apk add docker-compose
    WORKDIR /
    COPY ./docker-compose.yml .
    COPY ./.env .
    CMD [ "docker-compose", "up"]
    

    【讨论】:

    • 这不会特别有帮助。一个容器只运行一件事;如果它正在运行docker-compose up,那么它没有运行嵌套的 Docker 守护进程。
    【解决方案3】:

    试试docker run -v /var/run/docker.sock:/var/run/docker.sock -it container_name

    它将共享 docker 套接字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      • 2016-08-13
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多