Docker, pylibmc, memcached

У меня есть проект, который использует memcached. Поэтому, когда Docker пытается "установить pip install pylibmc", библиотека не может найти libmemcached, потому что она еще не установлена. Как я могу организовать свой docker-compose.yml, или, может быть, мне нужно что-то делать с dockerfile?

Теперь мой docker-compose.yml выглядит так (я удалил строки контейнера memcached):

version: '2'
    services:

      app:
        build: .
        volumes:
          - ./app:/usr/src/app
          - ./logs:/var/log
        expose:
          - "8000"
        links:
          - db:db
        networks:
          tickets-api:
            ipv4_address: 172.25.0.100
        extra_hosts:
          - "db:172.25.0.102"

      webserver:
        image: nginx:latest
        links:
          - app
          - db
        volumes_from:
          - app
        volumes:
          - ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
          - ./nginx/uwsgi_params:/etc/nginx/uwsgi_params
        ports:
          - "80:80"
        networks:
          tickets-api:
            ipv4_address: 172.25.0.101

      db:
        restart: always
        image: postgres
        volumes:
          - ./postgresql/pgdata:/pgdata
        ports:
          - "5432:5432"
        environment:
          - POSTGRES_USER=postgres
          - POSTGRES_PASSWORD=postgres
          - PGDATA=/pgdata
        networks:
          tickets-api:
            ipv4_address: 172.25.0.102

    networks:
      tickets-api:
        driver: bridge
        ipam:
          config:
          - subnet: 172.25.0.0/24

2 ответа

Решение

У вас есть два варианта. Установите его в свой контейнер приложения или установите memcached как изолированный контейнер.

ОПЦИЯ 1

Вы можете добавить команду для установки libmemcached в вашем приложении Dockerfile,

Если вы используете какое-то изображение на основе Ubuntu или Alpine

Просто добавь

RUN apt-get update && apt-get install -y \
        libmemcached11 \
        libmemcachedutil2 \
        libmemcached-dev \
        libz-dev

Затем вы можете сделать pip install pylibmc

ВАРИАНТ 2

Вы можете добавить memcached как отдельный контейнер. Просто добавьте в свой docker-compose

memcached:
  image: memcached
  ports:
    - "11211:11211"

Конечно, вам нужно связать контейнер вашего приложения с memcached контейнером.

Самый простой способ решить эту проблему - обновить Dockerfile для приложения и установки зависимостей разработки, необходимых для сборки пакета python.

В Ubuntu / Debian это может быть что-то вроде:

apt-get install libmemcached-dev gcc python-dev

Второй (более выгодный) вариант - собрать колесо для этого пакета в отдельном контейнере, а затем установить колесо вместо исходного архива. Таким образом, вам не нужно устанавливать какие-либо другие пакеты, и ваш окончательный образ будет намного меньше. Однако это требует больше работы для настройки.

Другие вопросы по тегам