usdotfhwaops/v2xhub-application:release-urraco

Manifest digest

sha256:12d16f130cdde5d24309d7cd49b88a3edbe12becb8fde8fdcfa312b9e5a29833

Last pushed

about 6 hours by saikrishnabairamoni

Type

Compose

Manifest digest

sha256:12d16f130cdde5d24309d7cd49b88a3edbe12becb8fde8fdcfa312b9e5a29833

Compose file content

services:
  db:
    image: mysql:8.0.40
    container_name: mysql
    environment:
      - TZ=${TZ:-America/New_York}
      - MYSQL_DATABASE=IVP
      - MYSQL_USER=IVP
      - MYSQL_PASSWORD_FILE=/run/secrets/mysql_password
      - MYSQL_RANDOM_ROOT_PASSWORD=yes
    networks:
      - v2xhub_data_internal
    secrets:
      - mysql_password
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "db", "-u", "IVP", "-p$$(cat /run/secrets/mysql_password)"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    volumes:
      - ./mysql/localhost.sql:/docker-entrypoint-initdb.d/localhost.sql
      - ./mysql/port_drayage.sql:/docker-entrypoint-initdb.d/port_drayage.sql
      # The following 5 files are used for CDA1Tenth. By default the standard "port_drayage.sql" file
      # will be loaded. Comment out the "port_drayage.sql" file above and uncomment the following 
      # three files to enable the CDA1Tenth sql files to be loaded.
      #- ./mysql/garage_port_drayage/port_drayage.sql:/docker-entrypoint-initdb.d/port_drayage.sql
      #- ./mysql/garage_port_drayage/port_drayage_lane1.sql:/docker-entrypoint-initdb.d/port_drayage_lane1.sql
      #- ./mysql/garage_port_drayage/port_drayage_lane2.sql:/docker-entrypoint-initdb.d/port_drayage_lane2.sql
      #- ./mysql/garage_port_drayage/port_drayage_trb_short.sql:/docker-entrypoint-initdb.d/port_drayage_trb_short.sql
      #- ./mysql/garage_port_drayage/port_drayage_trb_long.sql:/docker-entrypoint-initdb.d/port_drayage_trb_long.sql
      - mysql-datavolume:/var/lib/mysql
  php:
    image: usdotfhwaops/php:${V2XHUB_VERSION:-develop}
    container_name: php
    networks:
      - v2xhub_web_external
    ports:
      - "80:80"
      - "443:443"
    restart: always
    depends_on:
      - db
      - v2xhub
    stdin_open: true
    tty: true
    environment:
      - TZ=${TZ:-America/New_York}
    volumes:
      - ssl-certs-volume:/etc/apache2/ssl:ro
    healthcheck:
      test: ["CMD-SHELL", "curl -fsS -I http://127.0.0.1/ >/dev/null || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 12
      start_period: 30s

  v2xhub:
    image: usdotfhwaops/v2xhub:${V2XHUB_VERSION:-develop}
    container_name: v2xhub
    networks:
      - v2xhub_data_internal
      - v2xhub_app_external
    ports:
      # Command Plugin
      - "19760:19760"        # Command WebSocket

      # Message Receiver Plugin
      - "26780-26800:26780-26800/udp" # MessageReceiver (Range 26789 ±10)

      # SPaT Plugin
      - "6053:6053/udp"      # TSC sends UDP
      - "5050:5050/udp"      # SNMP polling

      # TIM Plugin
      - "10000:10000/tcp"    # TIM WebServicePort

      # CARMA Cloud Plugin
      - "22222:22222/tcp"

      # CDASim Adapter Plugin (simulation mode)
      - "6767:6767/udp"   # CDASim registration
      - "7575:7575/udp"   # time sync
      - "5757:5757/udp"   # SIM_V2X (simulated V2X out)

      # MUST Sensor Driver Plugin
      - "4545:4545/udp"      # MUST detection receiver port

    extra_hosts:
      - "host.docker.internal:host-gateway"
    restart: always
    depends_on:
      db:
        condition: service_healthy
    ulimits:
      nofile:
        soft: 2560
        hard: 2560
    deploy:
      resources:
        limits:
          memory: 2g
        reservations:
          memory: 1g
    environment:
      - MYSQL_HOST=db
      - MYSQL_PORT=3306
      - MYSQL_DATABASE=IVP
      - MYSQL_USER=IVP
      - MYSQL_PASSWORD=/run/secrets/mysql_password
      - SIMULATION_MODE=${SIMULATION_MODE:-false}
      - SIMULATION_IP=${SIMULATION_IP:-127.0.0.1}
      - SIMULATION_REGISTRATION_PORT=6767
      - V2XHUB_IP=${V2XHUB_IP:-0.0.0.0}
      - TIME_SYNC_TOPIC=time_sync
      - TIME_SYNC_PORT=7575
      - SIM_V2X_PORT=5757
      - SIM_INTERACTION_PORT=7576
      - V2X_PORT=8686
      - INFRASTRUCTURE_ID=${INFRASTRUCTURE_ID:-rsu_1234}
      - INFRASTRUCTURE_NAME=${INFRASTRUCTURE_NAME:-East Intersection}
      - SENSOR_JSON_FILE_PATH=${SENSOR_JSON_FILE_PATH:-/var/www/download/sensors.json}
      - V2XHUB_USERNAME=${V2XHUB_USERNAME:-v2xadmin}
      - V2XHUB_PASSWORD=${V2XHUB_PASSWORD}
      - TZ=${TZ:-America/New_York}
    secrets:
      - mysql_password
    volumes:
      - v2xhub-logs-volume:/var/log/tmx:rw
      - v2xhub-download-volume:/var/www/download/:rw
      - ssl-certs-volume:/var/www/plugins/ssl:rw
    healthcheck:
      test: ["CMD-SHELL", "ps -ef | grep -v grep | grep -q tmxcore && ps -ef | grep -v grep | grep -q CommandPlugin || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 12
      start_period: 30s

  port_drayage_webservice:
    image: usdotfhwaops/port-drayage-webservice:${V2XHUB_VERSION:-develop}
    container_name: port_drayage_webservice
    networks:
      - v2xhub_web_external
    ports:
      - "8090:8090"              # Port Drayage web UI
    profiles: ["port_drayage"]
    deploy:
      resources:
        limits:
          memory: 1g
        reservations:
          memory: 512m
    environment:
      - TZ=${TZ:-America/New_York}
secrets:
    mysql_password:
        environment: MYSQL_PASSWORD

volumes:
  mysql-datavolume:
  ssl-certs-volume:
    # To access/set SSL certifications on host machine setup local mapping to ssl directory.
    # NOTE: Ensure directory exists and has non-root privileges before running 
    # docker compose to prevent permission issues
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '${V2XHUB_VOLUME_PATH:-/tmp/v2xhub_data}/ssl' # Specify the absolute path on your host
  v2xhub-download-volume:
    # To access V2X Hub uploaded files on host machine setup local mapping to download directory.
    # NOTE: Ensure directory exists and has non-root privileges before running 
    # docker compose to prevent permission issues
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '${V2XHUB_VOLUME_PATH:-/tmp/v2xhub_data}/download' # Specify the absolute path on your host
  v2xhub-logs-volume:
    # To access log files on host machine setup local mapping to logs directory.
    # NOTE: Ensure directory exists and has non-root privileges before running 
    # docker compose to prevent permission issues
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '${V2XHUB_VOLUME_PATH:-/tmp/v2xhub_data}/logs' # Specify the absolute path on your host

# Networks: separated by purpose
networks:
  v2xhub_web_external:
    driver: bridge
  v2xhub_app_external:
    driver: bridge
  v2xhub_data_internal:
    driver: bridge
    internal: true  # No external internet access - only inter-service communication

Docker commands

docker compose -f oci://usdotfhwaops/v2xhub-application:release-urraco up

Use the above command to pull and run the Compose file. Learn more.

Images used

Image + 1 more

MySQL is a widely used, open-source relational database management system (RDBMS).


Pulls

1B+

Stars

16164

Last Updated

17 days

Image


Pulls

50K+

Stars

0

Last Updated

about 2 hours

Image


Pulls

10K+

Stars

0

Last Updated

about 3 hours

Image


Pulls

10K+

Stars

0

Last Updated

about 2 hours