【发布时间】:2021-04-02 03:33:42
【问题描述】:
我正在尝试为带有 Doctrine 的应用程序创建一个 Docker 容器(使用 docker-compose),问题是:如果我只是运行该应用程序,它可以工作,但是当我在运行命令之前尝试使用该应用程序时./vendor/bin/doctrine orm:generate-proxies,我收到错误:
PHP Warning: require(/tmp/__CG__DomainEntitiesAnyEntity.php): failed to open stream: No such file or directory in /var/www/html/vendor/doctrine/common/lib/Doctrine/Common/Proxy/AbstractProxyFactory.php on line 204
PHP Fatal error: require(): Failed opening required '/tmp/__CG__DomainEntitiesAnyEntity.php' (include_path='.:/usr/local/lib/php') in /var/www/html/vendor/doctrine/common/lib/Doctrine/Common/Proxy/AbstractProxyFactory.php on line 204
好的,所以只需在docker-compose.yml上运行命令
version: '3'
services:
apache_server:
build: .
working_dir: /var/www/html
ports:
- "80:80"
volumes:
- ./:/var/www/html
- ../uploads:/var/www/uploads
- ./.docker/apache2.conf:/etc/apache2/apache2.conf
- ./.docker/000-default.conf:/etc/apache2/sites-avaliable/000-default.conf
- ./.docker/php.ini:/etc/php/7.4/apache2/php.ini
depends_on:
- postgres_database
command: sh -c "./vendor/bin/doctrine orm:generate-proxies"
networks:
- some-network
是的,它按预期工作并生成/tmp 文件夹的代理,但在命令运行和生成代理的提示之后,我收到消息exited with code 0。这是因为 Docker 在获取 状态码 0 后完成了容器执行。所以我又尝试了两件事:
- 给某物加尾巴:
command: sh -c "./vendor/bin/doctrine orm:generate-proxies && tail -f /var/www/html/log.txt"
但是当我这样做时,服务器不再响应请求(http://localhost/)。
- 在运行命令前添加 tty:
tty: true
# restart: unless-stopped <--- also tried this
也不起作用。有没有另一种方法可以解决这个问题,而不必每次都在容器内手动运行命令?
PS:我的 dockerfile 就是这个:
FROM php:7.4-apache
WORKDIR /var/www/html
RUN a2enmod rewrite
RUN a2enmod headers
RUN mkdir /var/www/uploads
RUN mkdir /var/www/uploads/foo-upload-folder
RUN mkdir /var/www/uploads/bar-upload-folder
RUN chmod 777 -R /var/www/uploads
RUN apt-get update \
&& apt-get install -y \
libpq-dev \
zlib1g-dev \
libzip-dev \
unzip \
&& docker-php-ext-install \
pgsql \
pdo \
pdo_pgsql \
zip
RUN service apache2 restart
【问题讨论】:
标签: php docker apache doctrine-orm command