version: '3.8' services: # === 数据库服务 === mysql: image: mysql:latest container_name: fscan-mysql environment: MYSQL_ROOT_PASSWORD: Password MYSQL_DATABASE: mydb ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql healthcheck: test: ["CMD", "mysql", "-uroot", "-pPassword", "-e", "SELECT 1"] interval: 30s timeout: 3s retries: 3 restart: unless-stopped postgresql: image: postgres:latest container_name: fscan-postgresql environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: 123456 POSTGRES_DB: mydb ports: - "5432:5432" volumes: - postgresql_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 30s timeout: 3s retries: 3 restart: unless-stopped mongodb: image: mongo:latest container_name: fscan-mongodb environment: MONGO_INITDB_ROOT_USERNAME: admin MONGO_INITDB_ROOT_PASSWORD: 123456 ports: - "27017:27017" volumes: - mongodb_data:/data/db healthcheck: test: ["CMD", "mongosh", "--eval", "db.runCommand('ping').ok", "localhost:27017/test", "--quiet"] interval: 30s timeout: 3s retries: 3 restart: unless-stopped redis: image: redis:5.0.1 container_name: fscan-redis command: redis-server --bind 0.0.0.0 --protected-mode no --port 6379 ports: - "6379:6379" volumes: - redis_data:/data - ./test_dirs:/test_dirs restart: unless-stopped neo4j: image: neo4j:4.4 container_name: fscan-neo4j environment: NEO4J_AUTH: neo4j/123456 NEO4J_dbms_security_procedures_unrestricted: apoc.* NEO4J_dbms_security_auth_enabled: true ports: - "7474:7474" - "7687:7687" volumes: - neo4j_data:/data restart: unless-stopped memcached: image: memcached:latest container_name: fscan-memcached command: ["memcached", "-m", "64", "-c", "1024", "-v"] ports: - "11211:11211" restart: unless-stopped cassandra: image: cassandra:3.11 container_name: fscan-cassandra environment: CASSANDRA_AUTHENTICATOR: AllowAllAuthenticator ports: - "9042:9042" - "9160:9160" volumes: - cassandra_data:/var/lib/cassandra restart: unless-stopped mssql: image: mcr.microsoft.com/mssql/server:2022-latest container_name: fscan-mssql environment: ACCEPT_EULA: Y MSSQL_SA_PASSWORD: P@ssword123 MSSQL_PID: Express ports: - "1433:1433" volumes: - mssql_data:/var/opt/mssql healthcheck: test: ["CMD-SHELL", "/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P P@ssword123 -Q 'SELECT 1' || exit 1"] interval: 30s timeout: 3s retries: 3 restart: unless-stopped # === Web服务 === tomcat: build: ./TestDocker/Tomcat/ container_name: fscan-tomcat ports: - "8080:8080" volumes: - tomcat_webapps:/usr/local/tomcat/webapps restart: unless-stopped # === 搜索引擎 === elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.9.3 container_name: fscan-elasticsearch environment: - discovery.type=single-node - network.host=0.0.0.0 - ELASTIC_PASSWORD=elastic123 - xpack.security.enabled=false ports: - "9200:9200" - "9300:9300" volumes: - elasticsearch_data:/usr/share/elasticsearch/data restart: unless-stopped # === 消息队列 === rabbitmq: image: rabbitmq:3-management container_name: fscan-rabbitmq environment: RABBITMQ_DEFAULT_USER: admin RABBITMQ_DEFAULT_PASS: 123456 ports: - "5672:5672" - "15672:15672" volumes: - rabbitmq_data:/var/lib/rabbitmq restart: unless-stopped activemq: build: ./TestDocker/ActiveMQ/ container_name: fscan-activemq ports: - "61613:61613" - "61614:61614" restart: unless-stopped kafka: image: bitnami/kafka:latest container_name: fscan-kafka environment: - KAFKA_CFG_NODE_ID=1 - KAFKA_CFG_PROCESS_ROLES=broker,controller - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka:9093 - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER - KAFKA_CFG_LISTENERS=CONTROLLER://:9093,SASL_PLAINTEXT://:9092 - KAFKA_CFG_ADVERTISED_LISTENERS=SASL_PLAINTEXT://localhost:9092 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,SASL_PLAINTEXT:SASL_PLAINTEXT - KAFKA_CFG_SASL_ENABLED_MECHANISMS=PLAIN - KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL=PLAIN - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=SASL_PLAINTEXT - KAFKA_OPTS=-Djava.security.auth.login.config=/opt/bitnami/kafka/config/kafka_jaas.conf - ALLOW_PLAINTEXT_LISTENER=yes ports: - "9092:9092" volumes: - ./TestDocker/Kafka/kafka_jaas.conf:/opt/bitnami/kafka/config/kafka_jaas.conf - kafka_data:/bitnami/kafka restart: unless-stopped # === 目录服务 === ldap: build: ./TestDocker/LDAP/ container_name: fscan-ldap environment: LDAP_ORGANISATION: "Example Inc" LDAP_DOMAIN: "example.com" LDAP_BASE_DN: "dc=example,dc=com" LDAP_ADMIN_PASSWORD: "Aa123456789" LDAP_READONLY_USER: "true" LDAP_READONLY_USER_USERNAME: "readonly" LDAP_READONLY_USER_PASSWORD: "readonly" ports: - "389:389" - "636:636" volumes: - ldap_data:/var/lib/ldap restart: unless-stopped # === 网络服务 === ftp: image: bogem/ftp container_name: fscan-ftp environment: - FTP_USER=admin - FTP_PASS=123456 - PASV_ADDRESS=127.0.0.1 - PASV_MIN_PORT=30000 - PASV_MAX_PORT=30100 ports: - "21:21" - "20:20" - "30000-30100:30000-30100" restart: unless-stopped ssh: build: ./TestDocker/SSH/ container_name: fscan-ssh ports: - "2222:22" restart: unless-stopped smtp: build: ./TestDocker/SMTP/ container_name: fscan-smtp ports: - "25:25" restart: unless-stopped snmp: build: ./TestDocker/SNMP/ container_name: fscan-snmp ports: - "161:161/udp" restart: unless-stopped rsync: build: ./TestDocker/Rsync/ container_name: fscan-rsync ports: - "873:873" volumes: - ./test_data:/data/public restart: unless-stopped vnc: build: ./TestDocker/VNC/ container_name: fscan-vnc ports: - "5901:5901" restart: unless-stopped telnet: build: ./TestDocker/Telnet/ container_name: fscan-telnet ports: - "23:23" restart: unless-stopped # === 监控系统 === zabbix-mysql: image: mysql:8.0 container_name: fscan-zabbix-mysql command: --default-authentication-plugin=mysql_native_password environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_DATABASE: zabbix MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix123 ports: - "3307:3306" # 避免与主MySQL冲突 volumes: - zabbix_mysql_data:/var/lib/mysql restart: unless-stopped zabbix-server: image: zabbix/zabbix-server-mysql:ubuntu-6.0.23 container_name: fscan-zabbix-server environment: DB_SERVER_HOST: zabbix-mysql MYSQL_DATABASE: zabbix MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix123 MYSQL_ROOT_PASSWORD: root123 ports: - "10051:10051" depends_on: - zabbix-mysql restart: unless-stopped zabbix-web: image: zabbix/zabbix-web-nginx-mysql:ubuntu-6.0.23 container_name: fscan-zabbix-web environment: DB_SERVER_HOST: zabbix-mysql MYSQL_DATABASE: zabbix MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix123 MYSQL_ROOT_PASSWORD: root123 ZBX_SERVER_HOST: zabbix-server PHP_TZ: Asia/Shanghai ports: - "8081:8080" # 避免与Tomcat冲突 - "8443:8443" depends_on: - zabbix-mysql - zabbix-server restart: unless-stopped # === 数据卷 === volumes: mysql_data: postgresql_data: mongodb_data: redis_data: neo4j_data: cassandra_data: tomcat_webapps: elasticsearch_data: rabbitmq_data: kafka_data: ldap_data: zabbix_mysql_data: mssql_data: # === 网络 === networks: default: driver: bridge