2016-09-15 40 views
0

我有使用memcached的項目。所以當docker試圖「pip安裝pylibmc」時,庫找不到libmemcached,因爲它尚未安裝。我怎樣才能組織我的docker-compose.yml,或者我需要用dockerfile做些事情?現在Docker,pylibmc,memcached

我的搬運工,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 
+0

是你的應用程序,一個PHP應用程序? – levi

+0

這是一個Python應用程序。您可能想要發佈更多關於您收到的錯誤的信息。退出錯誤消息和一些上下文日誌會很好。我從我安裝類似軟件包的經驗中添加了一個答案。 – dnephin

回答

0

你有兩個選擇。將其安裝在應用程序容器中或將memcached安裝爲獨立容器。

OPTION 1

您可以添加一個命令來安裝上libmemcached您的應用程序的Dockerfile

如果您正在使用某種形式的基於Ubuntu的圖像或高山的

只需添加

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

然後,你可以做pip install pylibmc

OPTION 2

您可以添加memcached作爲一個獨立的容器。只需在您的加搬運工,組成

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

當然,您需要將您的應用程序容器memcached的容器聯繫起來。

+0

我不認爲這回答了這個問題。用戶正試圖安裝memcache客戶端,而不是運行服務器。 – dnephin

0

解決此問題的最簡單方法是更新應用程序的Dockerfile並安裝構建python包所需的開發依賴項。

在Ubuntu/Debian的,可能是這樣的:

apt-get install libmemcached-dev gcc python-dev 

第二(更有利)的選擇是要建立一個輪,用於這個包在一個單獨的容器中,然後安裝,而不是源碼包車輪。這樣你就不必安裝任何其他軟件包,並且你的最終圖像會小得多。但是它需要更多的工作來設置。