如何将 docker-compose 命令从主机挂载到 docker-容器中
how to mount docker-compose command from host into docker-container
我想 运行 docker-compose start
和 docker-compose stop
在 docker 容器中。
等效地,可以简单地尝试 运行 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/*
和 /usr/bin
目录时,我不想用主机上的所有这些库污染我的 docker-容器。
所以我的问题是:
我必须至少将哪些安装添加到我的 docker-compose 文件中,以便我可以 运行 docker-compose
在容器中?
如果您想从容器中 运行 docker-compose
,您需要将其安装到映像的 Docker 文件中。在这方面没有很好的捷径。
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 应用程序,因此您需要来自主机的 exact Python 和一个/usr/lib/python3
树的难以指定的子集。 (例如,参见 Debian Buster docker-compose
包中的 list of files。)更一般地说,将二进制文件从主机绑定安装到容器中往往不会顺利进行,因为应用程序可能具有共享库依赖项之类的东西或 /usr/share
中不会出现在容器中的内容。
同样在 Compose 的特殊情况下,实际上 运行 这样做会很尴尬,因为您需要将包含 docker-compose.yml
的主机目录绑定挂载到容器中才能使用它。通常,任何可以访问主机的 Docker 套接字的东西都可以很容易地为整个主机建立根目录。我会认真考虑是否有另一种方法 运行 你的更高级别的应用程序不需要在容器中编写。
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
我想 运行 docker-compose start
和 docker-compose stop
在 docker 容器中。
等效地,可以简单地尝试 运行 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/*
和 /usr/bin
目录时,我不想用主机上的所有这些库污染我的 docker-容器。
所以我的问题是:
我必须至少将哪些安装添加到我的 docker-compose 文件中,以便我可以 运行 docker-compose
在容器中?
如果您想从容器中 运行 docker-compose
,您需要将其安装到映像的 Docker 文件中。在这方面没有很好的捷径。
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 应用程序,因此您需要来自主机的 exact Python 和一个/usr/lib/python3
树的难以指定的子集。 (例如,参见 Debian Buster docker-compose
包中的 list of files。)更一般地说,将二进制文件从主机绑定安装到容器中往往不会顺利进行,因为应用程序可能具有共享库依赖项之类的东西或 /usr/share
中不会出现在容器中的内容。
同样在 Compose 的特殊情况下,实际上 运行 这样做会很尴尬,因为您需要将包含 docker-compose.yml
的主机目录绑定挂载到容器中才能使用它。通常,任何可以访问主机的 Docker 套接字的东西都可以很容易地为整个主机建立根目录。我会认真考虑是否有另一种方法 运行 你的更高级别的应用程序不需要在容器中编写。
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