Docker,pylibmc,memcached

时间:2016-09-15 20:44:15

标签: python docker memcached docker-compose pylibmc

我使用memcached的项目。因此,当docker尝试安装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 个答案:

答案 0 :(得分:1)

您有两种选择。在app容器中安装它或将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"

当然,您需要将app容器与memcached容器相关联。

答案 1 :(得分:0)

解决此问题的最简单方法是更新应用程序的Dockerfile并安装构建python包所需的开发依赖项。

在ubuntu / debian上可能是这样的:

apt-get install libmemcached-dev gcc python-dev

第二个(更有利的)选项是在单独的容器中为此包构建一个轮子,然后安装轮子而不是源tarball。这样您就不必安装任何其他软件包,您的最终图像将会小得多。但是,它需要更多的工作来设置。