docker 在 docker 中 docker compose

Rus*_*o_x 4 docker docker-compose

我对docker 很陌生,正在遵循此处找到的文档,尝试使用 docker-compose 1.14.0 在 dind 中部署多个容器,我得到以下结果

docker run -v /home/dudarev/compose/:/compose/ --privileged docker:dind /compose/docker-compose
/usr/local/bin/dockerd-entrypoint.sh: exec: line 21: /compose/docker-compose: not found
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

mch*_*wre 12

官方的dockerhub的码头工人,码头工人撰写的形象,只是使用它。

按着这些次序:

  • 在主机上创建目录 mkdir /root/test
  • 创建docker-compose.yaml包含以下内容的文件:
version: '2'

services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
  redis:
    image: redis
Run Code Online (Sandbox Code Playgroud)
  • 运行docker run命令在容器内运行 docker-compose。
docker run -itd -v /var/run/docker.sock:/var/run/docker.sock -v /root/test/:/var/tmp/ docker/compose:1.24.1  -f /var/tmp/docker-compose.yaml up -d
Run Code Online (Sandbox Code Playgroud)

注意:这里容器内的 /var/tmp 目录将包含 docker-compose.yaml 文件,所以我使用-f选项来指定 yaml 文件的完整路径。也docker.sock从主机安装到容器上。

希望这可以帮助。


mul*_*g0r 5

在执行 docker run 之前,将 docker-compose 安装添加到 Dockerfile 中。

例如,如果您有 Ubuntu docker,请添加到您的Dockerfile中:

RUN aptitude -y install docker-compose
RUN ln -s /usr/local/bin/docker-compose /compose/docker-compose
Run Code Online (Sandbox Code Playgroud)

因为看起来如果您的入口点在 /compose 文件夹中查找 docker compose,而 docker-compose 默认安装在 /usr/local/bin 中。

如果您想要具体的 docker-compose 版本(例如 1.20.0-rc2):

RUN curl -L https://github.com/docker/compose/releases/download/1.20.0-rc2/docker-compose-`uname -s`-`uname -m` -o /compose/docker-compose
RUN chmod +x /compose/docker-compose
Run Code Online (Sandbox Code Playgroud)