0

我想在 docker-container 中docker-compose start运行。docker-compose stop等效地,可以简单地尝试docker-compose --version成功运行。

我已经设法docker --version通过简单地添加两行来运行(见下文)。

该容器似乎使用 Ubuntu 18.04 LTS。

docker -compose 文件如下所示:

---
version: "2.1"
services:
  duplicati-2:
    image: ghcr.io/linuxserver/duplicati
    container_name: duplicati-2
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/London
      - CLI_ARGS= #optional
    volumes:
      - ./config:/config
      - /mnt/myBackups:/backups
      - /opt/docker:/source:ro
#---------------------------------------------------------------------
#---------- needed to run docker -------------------------------------
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker

#---------------------------------------------------------------------
#------------what must stand down here to run docker-compose?---------
      - /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
      - /usr/bin/python3:/usr/bin/python3
#---------------------------------------------------------------------


    ports:
      - 8300:8200
    restart: unless-stopped

我已经找到了通常在docker-compose --version这里运行的要求: https ://docs.docker.com/compose/install/

我害怕 python3 等所有需要的依赖项和库。/lib/*当愚蠢地从主机挂载整个目录和目录时,我不想用主机上的所有这些库污染我的 docker-container /usr/bin

所以我的问题是:我必须将哪些挂载添加到我的 docker-compose 文件中,以便我可以docker-compose在容器中运行?

4

1 回答 1

0

如果你想docker-compose在你的容器中运行,你需要将它安装在你的镜像的 Dockerfile 中。在这方面没有真正好的捷径。

FROM ubuntu:20.04
RUN apt-get update \
 && DEBIAN_FRONTEND=noninteractive \
    apt-get install --assume-yes --no-install-recommends \
      docker-compose \
      docker.io

在 Compose 的特定情况下,它是一个 Python 应用程序,其中涉及到库依赖项,因此您需要来自主机的确切Python 和一个难以指定的/usr/lib/python3树子集。(例如,参见Debian Buster软件包中的文件列表docker-compose。)更一般地说,将二进制文件从主机绑定到容器往往不会顺利进行,因为应用程序可能包含共享库依赖项或内容等/usr/share不会出现在容器中。

同样在 Compose 的特殊情况下,实际运行它会很尴尬,因为您需要将包含 的主机目录绑定挂载docker-compose.yml到容器中才能使用它。一般来说,任何可以访问主机的 Docker 套接字的东西都可以非常简单地根植整个主机。我会认真考虑是否有另一种方法来运行您的高级应用程序,而不需要在容器内进行 Compose。

version: '3.8'
services:
  compose:
    build: .
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - .:/compose
    working_dir: /compose
    environment:
      COMPOSE_PROJECT_NAME: current-directory-name
    command: /bin/true
  web:
    image: busybox
    command: httpd -f -h /www
    volumes:
      - .:/www
    ports:
      - 80:80
# This will technically work
docker-compose run compose \
  docker-compose up -d web
于 2021-07-07T16:57:26.313 回答