2016-12-05 218 views
2

今天我正在嘗試將Blackfire添加到我的Docker堆棧中!我遵循專用於Docker實現的Blackfire文檔,容器設置正確,但我無法成功創建我的應用程序的第一個配置文件。在Docker環境中使用Blackfire容器剖析我的應用程序

這是一個Symfony堆棧。我有一個PHP-FPM容器,以及一個啓動命令的CLI容器。 NGINX容器是網絡服務器。

docker-compose.yml文件如下:

--- 
cli: 
    container_name: my_app_cli 
    build: cli 
    volumes: 
     - "./volumes/apps:/srv/apps" 
    stdin_open: true 
    tty: true 
    environment: 
     - PHP_EXTRA_CONFIGURE_ARGS=--with-ldap 
    links: 
     - mysql:mysql 
     - redis:redis 
     - rabbitmq:rabbitmq 
     - web:web 
     - blackfire:blackfire 

mysql: 
    container_name: my_app_mysql 
    build: mysql 
    environment: 
     - MYSQL_DATABASES=my_database 
     - MYSQL_ROOT_PASSWORD=sgreat_password 
     - MYSQL_HOST=localhost 
     - MYSQL_PORT=33306 
     - MYSQL_USER=guest 
     - MYSQL_PASSWORD=password 
     - MYSQL_LOYALTY_DATABASE=my_database 
    ports: 
     # MySQL 
     - "33306:3306" 
    volumes: 
     # Mysql 
     - "./volumes/mysql:/var/lib/mysql" 

phpmyadmin: 
    container_name: my_app_phpmyadmin 
    image: nazarpc/phpmyadmin 
    ports: 
     # PHPMyAdmin HTTP 
     - "8082:80" 
    links: 
     - mysql:mysql 

phpfpm: 
    container_name: my_app_phpfpm 
    build: phpfpm 
    ports: 
     - "9000:9000" 
    environment: 
     - PHP_EXTRA_CONFIGURE_ARGS=--with-ldap 
    links: 
     - mysql:mysql 
    volumes: 
     - "./volumes/apps:/srv/apps" 

blackfire: 
    container_name: my_app_blackfire 
    image: blackfire/blackfire 
    environment: 
     # Exposes the host BLACKFIRE_SERVER_ID and TOKEN environment variables. 
     - BLACKFIRE_CLIENT_ID 
     - BLACKFIRE_CLIENT_TOKEN 
     - BLACKFIRE_SERVER_ID 
     - BLACKFIRE_SERVER_TOKEN 
    links: 
     - web:web 
    volumes: 
     - "./volumes/apps:/srv/apps" 
    ports: 
     - "8707:8707" 

rabbitmq: 
    container_name: my_app_rabbitmq 
    image: rabbitmq:3.5-management 
    volumes: 
     - /var/lib/rabbitmq 
    environment: 
     RABBITMQ_USER: guest 
     RABBITMQ_PASSWORD: guest 
    ports: 
     # rabbitmq management 
     - "8085:15672" 

redis: 
    container_name: my_app_redis 
    image: redis 
    environment: 
     REDIS_PASSWORD: great_password 
    volumes: 
     - "./volumes/redis:/data" 
    ports: 
     - "32772:6379" 

web: 
    container_name: my_app_web 
    build: nginx 
    environment: 
     NGINX_ENABLED_VHOST: www.my_app.local 
    extra_hosts: 
     - "www.my_app.local:127.0.0.1" 
    links: 
     - phpfpm 
    volumes: 
     - "./volumes/apps:/srv/apps" 
     - "./volumes/html:/usr/share/nginx/html" 
     - "./volumes/logs/nginx:/var/log/nginx" 
    ports: 
     - "80:80" 
     - "443:443" 

我的環境變量正確地與我Blackfire標識設置。

我儘量讓我用下面的命令行配置文件:

docker exec my_app_blackfire blackfire curl --proxy http://my_app_web:80 http://www.my_app.local/api/stores 

結果是:

Are you authorized to profile this page? No probe response, missing PHP extension or invalid signature for relaying agent. 

在這兩個PHP-FPM和CLI Dockerfiles,我把documentation instructions

RUN version=$(php -r "echo PHP_MAJOR_VERSION.PHP_MINOR_VERSION;") \ 
    && curl -A "Docker" -o /tmp/blackfire-probe.tar.gz -D - -L -s https://blackfire.io/api/v1/releases/probe/php/linux/amd64/$version \ 
    && tar zxpf /tmp/blackfire-probe.tar.gz -C /tmp \ 
    && mv /tmp/blackfire-*.so $(php -r "echo ini_get('extension_dir');")/blackfire.so \ 
    && printf "extension=blackfire.so\nblackfire.agent_socket=tcp://blackfire:8707\n" > $PHP_INI_DIR/conf.d/blackfire.ini 

編輯:觸發配置文件命令後,我在我的PHP-FPM中有以下日誌容器和我的NGINX應用程序日誌:

PHP-FPM

[06-Dec-2016 10:01:12] WARNING: [pool www] child 9 said into stderr: "NOTICE: PHP message: PHP Warning: Unknown: php_network_getaddresses: getaddrinfo failed: Name or service not known in Unknown on line 0" 
172.17.0.7 - 06/Dec/2016:10:00:46 +0000 "GET /app_dev.php" 301 
[06-Dec-2016 10:01:19] WARNING: [pool www] child 12 said into stderr: "NOTICE: PHP message: PHP Warning: Unknown: php_network_getaddresses: getaddrinfo failed: Name or service not known in Unknown on line 0" 
172.17.0.7 - 06/Dec/2016:10:01:12 +0000 "GET /app_dev.php" 301 

NGINX

2016/12/06 10:01:19 [error] 7#7: *3 FastCGI sent in stderr: "PHP message: PHP Warning: Unknown: php_network_getaddresses: getaddrinfo failed: Name or service not known in Unknown on line 0" while reading response header from upstream, client: 172.17.0.8, server: www.my_app.local, request: "GET http://www.my_app.local/api/stores HTTP/1.1", upstream: "fastcgi://172.17.0.6:9000", host: "www.my_app.local" 
2016/12/06 10:01:26 [error] 8#8: *5 FastCGI sent in stderr: "PHP message: PHP Warning: Unknown: php_network_getaddresses: getaddrinfo failed: Name or service not known in Unknown on line 0" while reading response header from upstream, client: 172.17.0.8, server: www.my_app.local, request: "GET http://www.my_app.local/api/stores HTTP/1.1", upstream: "fastcgi://172.17.0.6:9000", host: "www.my_app.local" 

回答

1

剛剛發現嗡嗡聲,您的php-fpm容器沒有任何鏈接到blackfire容器。

0

當你重寫blackfire容器名稱,你需要適應blackfire.agent_socket=tcp://blackfire:8707參數匹配你的容器名稱(即:blackfire.agent_socket=tcp://my_app_blackfire:8707)。

+0

我試過但它沒有改變,我有相同的錯誤和相同的日誌! – Kern

+2

Hum剛剛發現,您的phpfpm容器沒有任何鏈接到blackfire容器。 –

+1

太棒了!我刪除了鏈接到NGINX和來自Blackfire容器的卷,將鏈接從PHP-FPM設置到它,並且它工作正常!我只需在命令行中用NGINX容器IP替換my_app_web!非常感謝 !發佈它作爲答案,我會驗證它:)! – Kern

相關問題