Tag: symfony

无法通过PHP连接到docker mysql

我有一个docker-compose设置了两个容器:一个是php / apache服务,另一个容器是数据库(mysql)。 这是我的docker-compose.yml version: '2' services: app: depends_on: – db links: – db:mysql build: . image: app ports: – "80:80" restart: always links: – db:db volumes: – ../:/var/www/html/ db: image: mysql:latest restart: unless-stopped volumes: – ./db_data:/var/lib/mysql – ./databaseDumps:/tmp/databaseDumps environment: MYSQL_USER: "myApp" MYSQL_PASSWORD: "root" MYSQL_ROOT_PASSWORD: "root" MYSQL_DATABASE: "myAppDatabase" MYSQL_ROOT_HOST: "%" 这里是我的应用程序Dockerfile: FROM php:7-apache COPY prefilled_files/000-default.conf […]

在参数中设置symfonycaching目录

我正在为Symfony应用程序构builddocker环境。 每个应用程序都有一个容器,其中包含链接到应用程序服务器的Web根目录的附加数据容器。 作为基础架构安全强化的一部分,这些数据容器被设置为只读,以防止任何远程代码被利用。 每个应用程序也有一个侧面的汽车容器,允许日志写入。 Symfony当前将caching写入默认的cache_dir位置 ${web_root}/app/cache/${env} 这是在只读数据容器中 当试图启动应用程序时,我得到这个错误 无法写入caching目录 很明显,因为它在只写容器中会发生 我已经设置了我的log_path设置在读写边车logging容器中的只读容器之外的参数 /data/logs/symfony 这工作正常。 我已经阅读了Symfony的食谱如何超越目录结构,但它只build议如何在AppKernal.php中做到这AppKernal.php ,我不想做的path可能会改变取决于如果它在local/uat/prod环境。 我们从我们的构build服务器提供Symfony不同的参数取决于我们正在部署的环境,所以把这个configuration放在这里是有道理的。 有没有人知道是否有可能重写caching目录在configuration而不是编辑AppKernal.php

Docker权限开发环境使用主机装入卷

我正在使用docker-compose来为一堆symfony2应用程序设置一个可移植的开发环境(尽pipe我没有想做的事情只是针对symfony)。 我决定把本地机器上的源文件公开为docker中所有其他依赖项的数据卷。 这样开发人员可以在本地文件系统上进行编辑。 一切都很好,除了运行应用程序之后,我的caching和日志文件以及由/ vendor目录中的composer创build的文件现在由root拥有。 我已阅读关于这个问题和一些可能的方法在这里: 将添加的文件的权限更改为Docker卷 但我不能完全梳理我在docker-compose.yml文件中所做的更改,以便当我的symphony容器以docker开头时 – 编写任何创build的文件都具有主机上用户的权限。 我发布的文件供参考,工作人员是哪里的PHP等生活: source: image: symfony/worker-dev volumes: – $PWD:/var/www/app mongodb: image: mongo:2.4 ports: – "27017:27017" volumes_from: – source worker: image: symfony/worker-dev ports: – "80:80" – mongodb volumes_from: – source volumes: – "tmp/:/var/log/nginx"

我应该如何构造docker化的RabbitMQ?

我正尝试将我们的整体PHP Symfony应用程序迁移到一个更具可扩展性的Docker解决scheme。 应用程序和RabbitMQ之间有一些通信,我使用docker-compose将所有的容器,在这种情况下,应用程序和RabbitMQ服务器。 围绕这个话题进行了很多讨论,一个容器应该只产生一个stream程, Docker的最佳实践在这一点上有些模糊: 虽然这个口头禅的意图很好,但是每个容器只能有一个操作系统进程并不一定是真的。 除了容器现在可以用init进程产生的事实以外,一些程序可能会自己产生额外的进程。 为每个RabbitMQ使用者创build一个单独的Docker容器是否有意义? 这种感觉是“正确的”和“干净的”,不让rabbitmq服务器知道用于处理队列的语言/工具。 我想出了( docker-compose.yml相关部分): app : # my php-fpm app container rabbitmq_server: container_name: sf.rabbitmq_server build: .docker/rabbitmq ports: – "15672:15672" – "5672:5672" networks: – app_network rabbitmq_consumer: container_name: sf.rabbit_consumer extends: app depends_on: – rabbitmq_server working_dir: /app command: "php bin/console rabbitmq:consumer test" networks: – app_network 我可以在rabbitmq_consumer容器中使用nohup或其他方式在后台运行它们来运行多个消费者。 我想我的问题是: 我可以以某种方式自动执行“添加新消费者”,这样每次从代码中添加新消费者时,我都不需要编辑Docker(和其他人的“构build脚本”(和其他人一样))。 将RabbitMQ服务器与消费者分开是否有意义,还是应该将Rabbit服务器与在后台运行的消费者一起使用? 还是应该将它们放在应用程序容器的背景中?

Symfonylogging到Docker容器内的stdout

我正在为Symfony应用程序构build一个docker镜像。 在这个图像中,我想将Symfony日志stream式传输到标准输出。 所以,类似于如何configurationnginx日志,我将这一行添加到我的Dockerfile中: ln -sf /dev/stdout /var/www/project/app/logs/prod.log 在容器内部,我可以看到: $ ls /var/www/project/app/logs/ -l total 12 -rw-r–r– 1 501 games 4473 Jul 21 08:36 dev.log lrwxrwxrwx 1 501 games 11 Jul 21 08:35 prod.log -> /dev/stdout 但是,该应用程序抛出以下错误: PHP致命错误:未收到的exception“UnexpectedValueException”与消息“的stream或文件”/var/www/project/app/logs/prod.log“无法打开:无法打开stream:没有这样的文件或目录'在/无功/networking/项目/应用/caching/生产/ classes.php:5808 堆栈跟踪: #0 /var/www/project/app/cache/prod/classes.php(5746):Monolog \ Handler \ StreamHandler-> write(Array) #1 /var/www/project/app/cache/prod/classes.php(5917):Monolog \ Handler \ AbstractProcessingHandler-> handle(Array) #2 /var/www/project/app/cache/prod/classes.php(6207):Monolog \ […]

使用Docker构build和运行开发环境

我们正在尝试创build一个Docker容器来托pipe和运行我们的webapp(主要是用Symfony2编写的PHP)。 目前,容器embedded所有的应用程序代码,在构build图像时克隆(通过Dockerfile)。 该应用程序通过Vagrant(Precise64基本图像)在OSX上正确运行。 我们正在努力与主机(Vagrant – > OSX)共享容器embedded代码用于开发目的(编辑OSX主机上的文件应该影响容器代码)。 似乎没有办法将此文件夹从容器共享到主机。 从主机共享一个文件夹到容器( run命令的-v选项)将覆盖原始容器文件夹。 由于主机(Vagrant和OSX)无法读取原始位置,所以软链接不起作用。 我敢肯定,解决scheme是与Docker的卷( http://docs.docker.io/en/latest/use/working_with_volumes/ ),但我们还没有想出如何使其工作。 你有反馈/经验吗?

caching文件的symfony docker权限问题

我有一个docker-compose的docker的symfony安装程序,除了当我运行caching时工作的很好:从控制台清除 ,web服务器不能访问这些文件。 我可以通过取消注释umask(0000)来绕过权限问题; 在控制台和web / app_dev.php,但我想运行symfony作为推荐。 我做的是旋转集装箱docker-compose up 然后我进入容器。 容器包含apache,php和通过数据量的代码。 docker exec -i -t apache_1 /bin/bash 显然,我以root身份login,当我运行 app/console cache:clear caching中的所有文件都属于用户root。 WWW数据作为networking服务器用户现在不能访问这些文件了。 我也可以通过以www-datalogin来绕过这个问题,然后由cache:clear生成的文件属于www-data,networking服务器可以访问它们。 docker exec -u www-data -i -t apache_1 /bin/bash 但是这样做的缺点是我没有登陆bash,而是login/ usr / sbin / nologin,而且没有bash_history之类的东西。 search我发现这是Dockerfile的一部分,以解决权限问题,但它对我没有影响。 RUN usermod -u 1000 www-data 如果我理解正确的这切换用户1000万维网数据,但因为我是当我login到容器的根,这是行不通的,我假设。 那么为什么我当我login到容器的根 ,这个usermod假设如何工作? docker-compose.yml: proxy: image: jwilder/nginx-proxy:latest volumes: – /var/run/docker.sock:/tmp/docker.sock:ro ports: – "80:80" […]

从docker到websocket的彩色输出

这可能有点复杂的问题,但我可以尝试任何和所有的build议。 我正在运行一个克隆git仓库的docker实例,它是一个php 7的apache docker实例: FROM php:7.0-apache 用Symfony进程组件启动我的容器并传递我的环境variables。 "docker run -e REPOSITORY=\"{$url}\" -e COMPOSER_ALLOW_SUPERUSER=1 -e TERM='xterm-256color' arbiter bash -l" 我已经添加了xterm-256-color环境,以确保我得到彩色输出(纠正我,如果这是错误的)。 要显示容器的输出,我使用Symfony Process Component将其发送到websocket。 $process->run(function ($type, $buffer) use ($socket) { socket_write($socket, $buffer, strlen($buffer)); }); 在这一点上,我可以使用像socket.io这样的东西,实时显示在网页上。 问题是,我想显示docker输出正确的颜色,你通常会看到它与terminal。 尽pipe如此,所有的格式化和着色似乎都失去了。 有没有任何网站,我可以通过docker输出到WebSocket,仍然保持我的着色显示在网页上? 任何提示或提示引导我在正确的方向是受欢迎的,因为我在这里问很多。 感谢读书,欢呼。 编辑 为了清楚,我还没有得到任何彩色的输出,从docker容器给我的输出看起来就像这样(composer php的例子): [2017-02-12 01:02:56] local.INFO: remote: Counting objects: 69, done. remote: Compressing objects: 2% (1/47) remote: […]

在Vagrant + Docker上的Symfony 2应用程序

我正在尝试在Vagrant + Docker上部署Symfony 2应用程序。 Vagrantfile: VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "ubuntu/precise64" # config.vm.synced_folder ".", "/vagrant", owner: 'web', group: 'web' config.vm.network "forwarded_port", host: 5000, guest: 80 # config.vm.network "forwarded_port", host: 5001, guest: 3306 config.vm.provision "docker" do |d| d.build_image "/vagrant/Docker", args: "-t site/web" d.run "site/web", args: "-p 80:80 -v /vagrant/application:/var/www/site" end end Dockerfile: FROM […]

将stringparsing为从命令行输出的数组

我正在开发一个新的Symfony 2项目,这个项目将是Docker容器的面板pipe理。 在这个项目中,我使用exec() PHP函数执行一些命令。 我试图parsing下面的命令的输出: docker create tutum/lamp:latest –name test 2>&1 当命令是成功的,我得到了一个string的容器ID是好的,易于使用,但出现问题时,它是不一样的。 结果是一个带有var =“data”语法的string,我想要parsing它以获得数组。 命令输出: time="2015-06-21T11:33:26+02:00" level="fatal" msg="Error response from daemon: Conflict. The name \"test\" is already in use by container XXXXXXXX. You have to delete (or rename) that container to be able to reuse that name." 我希望有这样的事情: Array( time => "2015-06-21T11:33:26+02:00", level => "fatal" […]