как смонтировать команду docker-compose с хоста в docker-контейнер
Я бы хотел бежать
docker-compose start
а также
docker-compose stop
внутри докер-контейнера. Точно так же можно просто попытаться успешно бежать.
Мне уже удалось получить
docker --version
run, просто добавьте две строки (см. ниже).
Контейнер, похоже, использует Ubuntu 18.04 LTS.
В Докер-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-compose как минимум, чтобы я мог запускать
docker-compose
внутри контейнера?
1 ответ
Если вы хотите работать изнутри вашего контейнера, вам необходимо установить его в 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
package.) В более общем смысле, монтирование двоичных файлов с хоста в контейнер имеет тенденцию не работать, поскольку приложения могут иметь такие вещи, как зависимости разделяемой библиотеки или контент в
/usr/share
который не появится в контейнере.
Также в конкретном случае Compose, на самом деле запустить это будет неудобно, так как вам нужно привязать-смонтировать каталог хоста, содержащий
docker-compose.yml
в контейнер, чтобы иметь возможность использовать его. И вообще, все, что имеет доступ к сокету Docker хоста, может довольно просто получить root права для всего хоста. Я бы сильно подумал, есть ли другой способ запустить ваше приложение более высокого уровня, не требующий 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