通过docker中的composer安装laravel时出错
我在通过dockerfile安装laravel时遇到问题。我正在使用docker compose,它会拉一个docker文件,我基本上有以下内容:通过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
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-
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
...