Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过docker中的composer安装laravel时出错_Laravel_Docker_Docker Compose_Composer Php_Dockerfile - Fatal编程技术网

通过docker中的composer安装laravel时出错

通过docker中的composer安装laravel时出错,laravel,docker,docker-compose,composer-php,dockerfile,Laravel,Docker,Docker Compose,Composer Php,Dockerfile,我在通过dockerfile安装laravel时遇到问题。我正在使用docker compose,它会拉一个docker文件,我基本上有以下内容: FROM php:7.3-apache-stretch *some apt-get and install composer* WORKDIR /var/www RUN composer create-project --prefer-dist laravel/laravel app CMD apachectl -D FOREGROUND

我在通过dockerfile安装laravel时遇到问题。我正在使用docker compose,它会拉一个docker文件,我基本上有以下内容:

FROM php:7.3-apache-stretch

*some apt-get and install composer*

WORKDIR /var/www

RUN composer create-project --prefer-dist laravel/laravel app

CMD apachectl -D FOREGROUND
但是当我访问容器时,我会看到应该使用composer创建的文件,我看到它是空的,即使我看到在容器构建中执行了命令

这个容器工作得很好,甚至我都可以访问它。。。仅显示甚至不显示的文件


如果在创建容器后手动运行composer命令,则会显示文件。

在Dockerfile中,您使用了
WORKDIR/var/www
,然后
运行composer create project…
,这使composer在
/var/www
容器文件系统上创建文件

在用于启动容器的docker-compose.yml文件中:

您正在声明一个卷,该卷将装入容器中的同一位置
/var/www

发生的情况是,卷内容将取代容器文件系统中
/var/www
上的内容

我建议你仔细阅读,尤其是标题部分


现在继续,问问你自己为什么你首先需要这个音量。是否需要在运行时更改文件

如果没有,只需在生成时添加文件:

FROM php:7.3-apache-stretch

*some apt-get and install composer*

WORKDIR /var/www

RUN composer create-project --prefer-dist laravel/laravel app
COPY . /var/www

CMD apachectl -D FOREGROUND
并删除
/var/www
的卷


编辑

借助Docker容器进行开发 在开发过程中,您更改docker主机(假定为您的开发计算机)上的php文件,并需要通过从docker容器测试Web服务器提供的应用程序来频繁测试结果

每次需要测试应用程序时,都要重建Docker映像,这会很麻烦。解决方案是装入一个卷,以便容器可以为来自开发计算机的文件提供服务:

FROM php:7.3-apache-stretch

*some apt-get and install composer*

WORKDIR /var/www
CMD apachectl -D FOREGROUND
从以下几点开始:

version: '3.7'

services:
  app:
    container_name: "app"
    build:
      context: ./docker
      dockerfile: Dockerfile-app
    ports:
      - "80"
      - "443"
    restart: always
    depends_on:
      - db
    volumes:
      - ".:/var/www"
...
当需要在该容器中运行某些命令时,只需使用:

docker compose exec app composer创建项目--首选dist laravel/laravel应用程序
生成项目工件 由于您将要部署的不是包含源代码和配置的zip/tar归档,而是docker映像,因此您需要构建部署时使用的docker映像

用于生产的Dockerfile 对于生产使用,您希望有一个Docker映像,它保存所有必需的文件,不需要任何Docker卷,但保存用户生成的数据(上载的文件、数据库文件等)除外

请注意,此Dockerfile中没有
运行composer创建项目--首选dist laravel/laravel app
。这是因为该命令用于初始化项目,这是开发时任务,而不是部署时任务

您还需要一个地方来存放docker图像(a)。您可以使用部署自己的注册表作为Docker容器,也可以使用公司提供的:

  • Gitlab.com-(免费)
  • Docker.com-(1个私人图像免费)
  • Google.com-
因此,您需要构建一个docker映像,然后将该映像推送到注册表中。最佳实践是借助持续集成工具(如,,…)自动化这些任务

您的CI作业将运行以下命令:

git克隆我的应用程序
cd my_应用程序
git签出
docker构建-t/:
docker登录--用户=--密码=
docker push/:
部署Docker映像 从以下内容开始:

version: '3.7'

services:
  app:
    container_name: "app"
    image: <registry>/<my_app>:<version>
    ports:
      - "80"
      - "443"
    restart: always
    depends_on:
      - db
...
版本:“3.7”
服务:
应用程序:
容器名称:“应用程序”
图片:/:
端口:
- "80"
- "443"
重新启动:始终
取决于:
-分贝
...

请注意,docker compose文件没有生成任何图像。对于生产,更好的做法是引用已构建的docker映像(该映像已在先前的登台环境中部署以进行验证)。

您能否共享您正在运行的确切命令和实际dockerfile脚本,以及终端在运行composer命令时显示的内容?终端输出非常巨大。。。我忽略了安装composer之前的输出,因为它没有发出错误。。。好啊我明白了。。。我会找到最好的解决办法。。。关于卷,理由是我对文件的编辑是通过主机完成的。有什么建议吗?你是使用这个docker映像进行开发还是在生产中运行你的应用程序?开发…但一个想法是在生产中玩没有问题…在这种情况下,我会使用
/var/www
上的卷,删除
RUN composer create项目--更喜欢dist laravel/laravel app
复制/var/www
来自Dockerfile。启动容器,然后运行
docker exec composer create project--首选dist laravel/laravel应用程序
我已经用docker的生产指南编辑了我的答案
FROM php:7.3-apache-stretch

*some apt-get and install composer*

WORKDIR /var/www

COPY . /var/www

CMD apachectl -D FOREGROUND
version: '3.7'

services:
  app:
    container_name: "app"
    image: <registry>/<my_app>:<version>
    ports:
      - "80"
      - "443"
    restart: always
    depends_on:
      - db
...