2016-04-19 1 views
1

ここでDockerの新人は、Composeを使って簡単なDjangoプロジェクトをセットアップしようとしています。私はsuccess with this in the pastを持っていましたが、今度は別のセットアップを試しています。なぜ動作しないのか分かりません。docker-staticボリュームを使ってdjangoの静的ファイルを扱うことに混乱しています

私は、次のドッキングウィンドウ-compose.ymlファイルがあります:

data: 
    image: postgres:9.4 
    volumes: 
    - /var/lib/postgresql 
    command: /bin/true 

db: 
    image: postgres:9.4 
    restart: always 
    expose: 
    - "5432" 
    volumes_from: 
    - data 

app: 
    build: . 
    restart: always 
    env_file: .env 
    expose: 
    - "8000" 
    links: 
    - db:db 
    volumes: 
    - .static:/static_files 

web: 
    build: docker/web 
    restart: always 
    ports: 
    - "80:80" 
    links: 
    - app:app 
    volumes_from: 
    - app 

マイ/ Dockerfileは次のとおりです。

FROM python:3.5 
ENV PYTHONUNBUFFERED 1 

ADD . /app 
WORKDIR /app 
RUN pip install -r requirements.txt 
RUN SECRET_KEY=tmpkey python manage.py collectstatic --noinput 

CMD gunicorn mysite.wsgi:application -b 0.0.0.0:8000 

マイ/ドッキングウィンドウ/ウェブ/ Dockerfileは次のとおりです。

FROM nginx:1.9 
RUN rm /etc/nginx/conf.d/default.conf 
ADD default.conf /etc/nginx/conf.d/ 

を私の/docker/web/default.confファイルは:

server { 
    listen 80 default_server; 

    location /static/ { 
     autoindex on; 
     alias /static_files/; 
    } 

    location/{ 
     proxy_pass http://app:8000; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
} 

ドッカーの出力は/ static_filesにインストールされている静的ファイルを表示しますが、nginxは/ staticの下にあるすべてのファイルに対して404を返します。私の.staticフォルダ(プロジェクトのルート)を見ると、ディレクトリは空です(そこにある.gitkeepファイルを除いて)。 docker-compose app run ls -la /static_filesを実行すると、ディレクトリは空ですが、docker-compose app run ls -la /app/.staticに.gitkeepファイルがあります。明らかに私はDockerとComposeで何かを誤解しています。私が間違ってやっていることに関する考えは?私の理解は、RUN SECRET_KEY=tmpkey python manage.py collectstatic --noinputがローカルの.staticフォルダにファイルを書き込む必要があり、nginxはこれらのファイルを参照する必要があります。どちらも起こっていない。

ソフトウェアのバージョン:docker-composeバージョン1.7.0、build 0d7bf73およびDockerバージョン1.11.0、OS Xでビルド4dc5990、ドッカーマシンがクラウドインスタンスに接続されています。

答えて

4

元のコードが機能しない理由はまだ分かりませんが、サービス外でボリュームを定義しているComposeのv2形式を使用するようにコードを切り替えると、私はまだ不明です。

version: '2' 
services: 
    db: 
    image: postgres:9.4 
    restart: always 
    expose: 
     - "5432" 
    volumes: 
     - postgres-data:/var/lib/postgresql 
    app: 
    build: . 
    restart: always 
    env_file: .env 
    expose: 
     - "8000" 
    links: 
     - db:db 
    volumes: 
     - static-data:/static_files 
    web: 
    build: docker/web 
    restart: always 
    ports: 
     - "80:80" 
    links: 
     - app:app 
    volumes: 
     - static-data:/static_files 
volumes: 
    postgres-data: 
    driver: local 
    static-data: 
    driver: local 

は設定ファイルの残りの部分は同じまま:

は、ここに私の更新ドッカ-compose.ymlファイルです。

(それは私がこの新しい設定を実行する前に、私は docker volume lsに記載されているすべての既存のドッカーボリュームを削除したことは注目に値するかもしれ - おそらくこれが私の実際の修正だった?)

関連する問題