Docker-构成持续集成

我是docker技术的新手。 我其实有一个使命是使用docker构build一个持续集成的环境,这里是我做的docker-compose,但是当运行docker-compose时,我仍然遇到一些错误,例如声纳exception:数据库连接失败。 实际的操作系统是在VirtualBox窗口下的oracle linux。

version: '2' networks: devnet: driver: bridge services: nexus: image: sonatype/nexus container_name: nexus ports: - "8081:8081" networks: - devnet volumes: - "/opt/nexus/:/var/lib/nexus" jenkins: image: jenkins container_name: jenkins ports: - "8080:8080" networks: - devnet volumes: - "$PWD/jenkins:/var/jenkins_home" mongodb: image: mongo networks: - devnet ports: - 8085:8085 environment: - MONGODB_USER=root - MONGODB_DATABASE=srsmongodb - MONGODB_PASS=root volumes: - /srv/docker/mongodb:/var/lib/mongodb restart: always tomcat: image: tomcat container_name: tomcat networks: - devnet volumes: - ./target/ROOT.war:/usr/local/tomcat/webapps/ROOT.war ports: - 8084:8084 restart: always sonarqube: image: sonarqube container_name: sonarqube restart: always ports: - "9000:9000" networks: - devnet environment: - SONARQUBE_JDBC_USERNAME=root - SONARQUBE_JDBC_PASSWORD=root - SONARQUBE_JDBC_URL=jdbc:mysql://sonardb:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance volumes: - "/opt/sonar/:/var/lib/sonar" depends_on: - mysql mysql: image: mysql networks: - devnet restart: always ports: - 3307:3307 tty: true volumes: - /opt/mysql:/var/lib/mysql:rw environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=sonardb 

看起来好像你在混淆MySQL数据库的DNS名称和MySQL数据库的名称。 在你的例子中, sonarqube图像的JDBC URL应该是:

 jdbc:mysql://mysql:3306/sonardb?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance 

在Docker Compose中创buildnetworking时,该networking中的服务将通过与服务相同的DNS名称提供。 在这种情况下, mysql将parsing为MySQL容器的IP地址。 您提供给mysql服务的环境variables将创build一个名为sonardb的数据库。

详见https://docs.docker.com/compose/networking/#links的链接部分:

默认情况下,任何服务都可以以该服务的名称到达任何其他服务。 在以下示例中,可通过主机名db和数据库从Web访问db