2016-09-15 3 views
0

Ich habe ein Projekt, das Memcached verwendet. Wenn docker also versucht, "pylibmc pip zu installieren", kann die Bibliothek libmemcached nicht finden, weil sie noch nicht installiert ist. Wie kann ich meine docker-compose.yml organisieren, oder muss ich etwas mit dockerfile machen?Docker, pylibmc, memcached

Nun meine Docker-compose.yml sieht aus wie (I Memcached Containerlinien gelöscht haben):

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

sind Sie App, eine PHP-App? – levi

+0

Es ist eine Python-App. Vielleicht möchten Sie mehr über den Fehler berichten, den Sie erhalten haben. Die Exit-Fehlermeldung und einige Kontext-Logs wären großartig. Ich habe eine Antwort aus meiner Erfahrung hinzugefügt, ähnliche Pakete zu installieren. – dnephin

Antwort

0

Sie haben zwei Möglichkeiten. Installieren Sie es in Ihrem App-Container oder installieren Sie memcached als isolierten Container.

OPTION 1

Sie einen Befehl hinzufügen können libmemcached auf Ihrer App Dockerfile zu installieren.

Wenn Sie irgendeine Art von ubuntu basierten Bild oder alpine verwenden

Fügen Sie einfach

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

Dann können Sie pip install pylibmc

OPTION 2

tun können Sie fügen Memcached als separater Container. Fügen Sie einfach in Ihrem Docker-komponieren

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

Natürlich müssen Sie Ihre App-Container mit Memcached Behälter verbinden.

+0

Ich glaube nicht, dass dies die Frage beantwortet. Der Benutzer versucht, den Memcache-Client zu installieren und den Server nicht auszuführen. – dnephin

0

Der einfachste Weg, dieses Problem zu lösen, ist die Dockerfile für die App zu aktualisieren und die Entwicklungsabhängigkeiten zu installieren, die zum Erstellen des Python-Pakets erforderlich sind.

auf Ubuntu/Debian, die wie etwas sein könnte:

apt-get install libmemcached-dev gcc python-dev 

Eine zweite (mehr advantaged) Option ist ein Rad für dieses Paket in einem separaten Behälter zu bauen, installieren Sie dann das Rad statt Quellkodearchivs . Auf diese Weise müssen Sie keine anderen Pakete installieren, und Ihr endgültiges Bild wird viel kleiner sein. Es erfordert jedoch mehr Arbeit für die Einrichtung.