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