【问题标题】:Dockerized Django with webpackDevServer使用 webpackDevServer Dockerized Django
【发布时间】:2016-12-09 10:53:43
【问题描述】:

我需要一些有关 Docker 配置的帮助,以使 Django 在开发模式下与 webpack 开发服务器一起工作。我希望 django docker 容器能够访问 webpack 生成的包。

我很难理解容器如何与 docker-compose 中的卷共享文件。

到目前为止,我只设法拥有一个工作的 django dockerized 应用程序,然后我在本地运行 npm install && node server.js。

Dockerfile

# use base python image with python 2.7
FROM python:2.7
ENV PYTHONUNBUFFERED 1

# set working directory to /code/
RUN mkdir /code
WORKDIR /code

# add requirements.txt to the image
ADD requirements.txt /code/

# install python dependencies
RUN pip install -r requirements.txt

ADD . /code/

# Port to expose
EXPOSE 8000

docker-compose.yml

version: '2'
services:
  db:
    image: postgres
  redis:
    image: redis
  rabbitmq:
    image: rabbitmq:3-management
    ports:
      - "5672:5672"  # we forward this port because it's useful for debugging
      - "15672:15672"  # here, we can access rabbitmq management plugin
  worker:
    build: .
    command: celery worker -A example -l info
    volumes:
      - .:/code
    links:
      - db
      - rabbitmq
      - redis
  web:
    build:
      context: .
      dockerfile: Dockerfile
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
      - ./assets/bundles:/webpack (here I'm trying in some way to address webpack files to assets/bundles)
    ports:
      - "8000:8000"
    links:
      - db
      - rabbitmq
      - redis

这是我对 webpack 的尝试

Dockerfile.webpack

FROM node:latest

WORKDIR /webpack
COPY package.json /webpack/
COPY server.js /webpack/

RUN npm config set registry http://registry.npmjs.org/ && npm install

ADD . /webpack/

# Port to expose
EXPOSE 3000

这是添加到 docker-compose.yml 中的 sn-p

webpack:
    build:
      context: .
      dockerfile: Dockerfile.webpack
    command: node server.js
    volumes:
      - .:/webpack
    ports:
      - "3000:3000"

server.js

var webpack = require('webpack')
var WebpackDevServer = require('webpack-dev-server')
var config = require('./webpack.config')

new WebpackDevServer(webpack(config), {
  publicPath: config.output.publicPath,
  hot: true,
  inline: true,
  historyApiFallback: true
}).listen(3000, '0.0.0.0', function (err, result) {
  if (err) {
    console.log(err)
  }

  console.log('Listening at 0.0.0.0:3000')
})

【问题讨论】:

    标签: django docker webpack docker-compose dockerfile


    【解决方案1】:

    感谢这个 SO thread 我找到了解决方案。

    docker-compose.yml

    version: '2'
    services:
      webpack:
        build:
          context: .
          dockerfile: docker/webpack
        volumes_from:
          - webapp:rw
    
      webapp:
        build:
          context: .
          dockerfile: docker/webapp
        command: python manage.py runserver 0.0.0.0:8000
        volumes:
          - .:/code
        ports:
          - "8000:8000"
    

    docker/webapp

    FROM python:latest
    ENV PYTHONUNBUFFERED 1
    
    # set working directory to /code/
    RUN mkdir /code
    WORKDIR /code
    
    # add requirements.txt to the image
    ADD ./requirements.txt /code/
    
    # install python dependencies
    RUN pip install -r requirements.txt
    
    ADD . /code/
    
    # Port to expose
    EXPOSE 8000
    

    docker/webpack

    from node:latest
    
    RUN npm install webpack -g
    
    ADD docker/start-webpack.sh .
    RUN chmod +x /start-webpack.sh
    
    CMD ./start-webpack.sh
    

    docker/start-webpack.sh

    #!/usr/bin/env bash
    
    until cd /code && npm install
    do
      echo "Retrying npm install"
    done
    
    webpack --watch --watch-polling
    

    【讨论】:

      【解决方案2】:

      当使用webpack-dev-server 时,实际输出会转到in-memory output filesystem,因此从 Django 访问包的唯一方法是向客户端提供指向由 @ 返回包的公共路径的 URL 987654323@,或者扩展静态资产的发现和收集方式,以通过 HTTP 检索这些资产,前提是只有 Django 可以访问 Webpack 容器。

      既然已经涵盖了,我建议您不要这样做。而是使用webpack $ARGSwebpack --watch $DEV_ARGS。这会将输出写入卷,然后您可以与 Django 共享。

      【讨论】:

      • 我需要更多帮助。我对此感到沮丧。将容器(在本例中为 webpack)的输出写入卷的正确方法是什么,另一个容器(在本例中为 web)可以从目录(在本例中为 ./code)访问它。我整天都在想办法:/
      猜你喜欢
      • 2020-11-18
      • 2020-06-15
      • 1970-01-01
      • 2021-12-20
      • 2021-04-25
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多