【问题标题】:Docker, pylibmc, memcachedDocker、pylibmc、memcached
【发布时间】:2016-09-15 20:44:14
【问题描述】:

我有一个使用 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

【问题讨论】:

  • 你是一个应用程序,一个 php 应用程序吗?
  • 这是一个 python 应用程序。您可能想发布更多关于您收到的错误的信息。退出错误消息和一些上下文日志会很棒。我根据我安装类似软件包的经验添加了一个答案。

标签: python docker memcached docker-compose pylibmc


【解决方案1】:

你有两个选择。将其安装在您的应用容器中或将 memcached 安装为隔离容器。

选项 1

您可以添加一个命令以在您应用的Dockerfile 上安装libmemcached

如果您使用某种基于 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 容器链接起来。

【讨论】:

  • 我认为这不能回答问题。用户正在尝试安装 memcache 客户端,而不是运行服务器。
  • 你能补充一点关于应用程序如何链接到容器的内容吗?
【解决方案2】:

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

在 ubuntu/debian 上可能类似于:

apt-get install libmemcached-dev gcc python-dev

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

【讨论】:

    猜你喜欢
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 2015-02-23
    • 2022-10-12
    • 2021-10-26
    • 1970-01-01
    相关资源
    最近更新 更多