Webpacker hot-reload (HRM) in Docker
    
    
      #rails #docker
    
    
  
I was trying to get the HRM working in the docker environment today. What I forgot is how the webpacker try to resolv the webpacker server, which is not obvious in non-docker environment. Few of the points that I learned:
- Webpacker host and port configurations are important in both 
docker-compose.ymlas well as inwebpacker.yml. Websocket is initialised with these values. - It is better to have a separate image that runs the 
bin/webpack-dev-server - Compile on demand is way too slow for development if your files are huge, or even medium sized.
 publicandhostconfiguration indev_serverinwebpacker.ymlare two different things.- There is some issue with the docker already containing the compiled files in the output directory (typically in 
public/packs). 
This was the final configuration that I had to get it up and running:
docker-compse.yml
services:
  webpacker:
    build: .
    command: bash -c "rm -rf /myapp/public/packs; /myapp/bin/webpack-dev-server"
    volumes:
      - .:/myapp
    ports:
      - "3035:3035"
  db:
    image: postgres:9.6
    ports:
      - "5432"
  app:
    build: .
    command: bash -c "rm /myapp/tmp/pids/server.pid; bundle exec rails server -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - webpacker
      - postgresdev_server section in webpacker.yml
  dev_server:
    https: false
    host: webpacker # <-- this is the key
    port: 3035
    public: 0.0.0.0:3035
    hmr: true
    # Inline should be set to true if using HMR
    inline: true
    overlay: true
    disable_host_check: true
    use_local_ip: falseA docker-compose up will start the web server along with the webpacker sever that will watch for change and pass it via a websocket to the frontend which will get automatically reloaded after the diff got compiled.
Very fast!