2 min read

Monitoring and intercepting network requests in Docker

I recently encountered a situation where I needed to monitor and intercept network requests within Docker containers. To be honest, I’m not an expert in DevOps or server infrastructure, so learning to set up complex monitoring tools would be painful and time-consuming.

I prefer keeping things simple. I usually use mitmproxy during development. While it’s possible to run mitmproxy in Docker, it makes the logs messy and isn’t convenient to use in that kind of environment. But then I discovered that mitmproxy has a web interface called mitmweb which comes with rich features.

And setting it up in Docker was really easy. If you use Docker Compose , just add it to your docker-compose.yml file. Here is a complete example:

services:
  mitmweb:
    image: mitmproxy/mitmproxy:latest
    container_name: mitmweb
    command: >
      mitmweb 
      --web-host 0.0.0.0 
      --web-port 8081 
      -p 8080 
      --no-web-open-browser 
      --set web_password=admin123
    ports:
      - "8080:8080"
      - "8081:8081"
    networks:
      - proxy-network
    restart: unless-stopped

  test-app:
    image: curlimages/curl:latest
    container_name: test-app
    environment:
      # Set proxy to route requests through mitmweb
      - HTTP_PROXY=http://mitmweb:8080
      - HTTPS_PROXY=http://mitmweb:8080
    networks:
      # Both containers must be on the same network
      - proxy-network
    depends_on:
      - mitmweb
    command: >
      sh -c "
        echo 'Waiting for mitmweb to start...' &&
        sleep 10 &&
        echo 'Testing request:' &&
        curl -v -k https://httpbin.org/get &&
        tail -f /dev/null
      "

networks:
  proxy-network:
    driver: bridge

To access mitmweb, go to http://localhost:8081 and enter the password (in the example above, it’s admin123). Tada! Now you can use it to monitor, intercept, or even simulate network requests of your application.

DockerNetworkingMonitoringIntercepting