如何在 docker 的容器中安装作曲家?
How do I install composer in container of docker?
我是 docker 和 docker-compose 的新手,我正在使用 Laradock 在 docker 和 docker-compose 上开发一个 Laravel-项目按照教程进行操作(虽然不确定这种情况是否正确)。
我想在此环境中安装 composer
以便能够使用 composer
命令。
其实我想做种,把数据放到我php artisan make:migrate
做的DB里,结果出现这个错误
include(/var/www/laravel_practice/vendor/composer/../../database/seeds/AdminsTableSeeder.php): failed to open stream: No such file or directory
所以我用谷歌搜索了这个脚本以找到可以解决错误的解决方案,然后我找到了它。
它说,"Do composer dump-autoload
and try seeding again",所以我按照它然后出现了这个错误。
bash: composer: command not found
因为我还没有将 composer 安装到 docker-container 中。
我的docker现在的状态就是这样。
・工作空间
・mysql
・阿帕奇
・php-fpm
由于我还没有安装 composer
,我必须将它安装到 docker-container 中才能解决问题,但是我不知道如何将它安装到 docker-container.
那么谁能告诉我如何将 composer
安装到 docker-container 中?
谢谢。
这里是 laradock/mysql/Dockerfile
和 laravelProject/docker-compose.yml
.
ARG MYSQL_VERSION=5.7
FROM mysql:${MYSQL_VERSION}
LABEL maintainer="Mahmoud Zalt <mahmoud@zalt.me>"
#####################################
# Set Timezone
#####################################
ARG TZ=UTC
ENV TZ ${TZ}
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && chown -R mysql:root /var/lib/mysql/
COPY my.cnf /etc/mysql/conf.d/my.cnf
CMD ["mysqld"]
EXPOSE 3306
version: '2'
services:
db:
image: mysql:5.7
ports:
- "6603:3306"
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=true
- MYSQL_DATABASE=laravelProject
- LANG=C.UTF-8
volumes:
- db:/var/lib/mysql
command: mysqld --sql-mode=NO_ENGINE_SUBSTITUTION --character-set-server=utf8 --collation-server=utf8_unicode_ci
web:
image: arbiedev/php-nginx:7.1.8
ports:
- "8080:80"
volumes:
- ./www:/var/www
- ./nginx.conf:/etc/nginx/sites-enabled/default
volumes:
db:
您可以构建自己的图像并在 Docker 撰写文件中使用它。
FROM php:7.2-alpine3.8
RUN apk update
RUN apk add bash
RUN apk add curl
# INSTALL COMPOSER
RUN curl -s https://getcomposer.org/installer | php
RUN alias composer='php composer.phar'
# INSTALL NGINX
RUN apk add nginx
我使用 PHP alpine 镜像作为我的基础镜像,因为它是轻量级的,所以您可能需要自己安装其他依赖项。在您的 docker-compose 文件中
web:
build: path/to/your/Dockerfile/directory
image: your-image-tag
ports:
- "8080:80"
volumes:
- ./www:/var/www
- ./nginx.conf:/etc/nginx/sites-enabled/default
你可以这样做:
FROM php:8.0.2-apache
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y mariadb-client libxml2-dev
RUN apt-get autoremove -y && apt-get autoclean
RUN docker-php-ext-install mysqli pdo pdo_mysql xml
COPY --from=composer /usr/bin/composer /usr/bin/composer
参数 COPY --from= 应该可以解决您的问题。
FROM php:7.3-fpm-alpine
RUN docker-php-ext-install pdo pdo_mysql
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer
RUN apk update
RUN apk upgrade
RUN apk add bash
RUN alias composer='php /usr/bin/composer'
我是 docker 和 docker-compose 的新手,我正在使用 Laradock 在 docker 和 docker-compose 上开发一个 Laravel-项目按照教程进行操作(虽然不确定这种情况是否正确)。
我想在此环境中安装 composer
以便能够使用 composer
命令。
其实我想做种,把数据放到我php artisan make:migrate
做的DB里,结果出现这个错误
include(/var/www/laravel_practice/vendor/composer/../../database/seeds/AdminsTableSeeder.php): failed to open stream: No such file or directory
所以我用谷歌搜索了这个脚本以找到可以解决错误的解决方案,然后我找到了它。
它说,"Do composer dump-autoload
and try seeding again",所以我按照它然后出现了这个错误。
bash: composer: command not found
因为我还没有将 composer 安装到 docker-container 中。
我的docker现在的状态就是这样。
・工作空间
・mysql
・阿帕奇
・php-fpm
由于我还没有安装 composer
,我必须将它安装到 docker-container 中才能解决问题,但是我不知道如何将它安装到 docker-container.
那么谁能告诉我如何将 composer
安装到 docker-container 中?
谢谢。
这里是 laradock/mysql/Dockerfile
和 laravelProject/docker-compose.yml
.
ARG MYSQL_VERSION=5.7
FROM mysql:${MYSQL_VERSION}
LABEL maintainer="Mahmoud Zalt <mahmoud@zalt.me>"
#####################################
# Set Timezone
#####################################
ARG TZ=UTC
ENV TZ ${TZ}
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && chown -R mysql:root /var/lib/mysql/
COPY my.cnf /etc/mysql/conf.d/my.cnf
CMD ["mysqld"]
EXPOSE 3306
version: '2'
services:
db:
image: mysql:5.7
ports:
- "6603:3306"
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=true
- MYSQL_DATABASE=laravelProject
- LANG=C.UTF-8
volumes:
- db:/var/lib/mysql
command: mysqld --sql-mode=NO_ENGINE_SUBSTITUTION --character-set-server=utf8 --collation-server=utf8_unicode_ci
web:
image: arbiedev/php-nginx:7.1.8
ports:
- "8080:80"
volumes:
- ./www:/var/www
- ./nginx.conf:/etc/nginx/sites-enabled/default
volumes:
db:
您可以构建自己的图像并在 Docker 撰写文件中使用它。
FROM php:7.2-alpine3.8
RUN apk update
RUN apk add bash
RUN apk add curl
# INSTALL COMPOSER
RUN curl -s https://getcomposer.org/installer | php
RUN alias composer='php composer.phar'
# INSTALL NGINX
RUN apk add nginx
我使用 PHP alpine 镜像作为我的基础镜像,因为它是轻量级的,所以您可能需要自己安装其他依赖项。在您的 docker-compose 文件中
web:
build: path/to/your/Dockerfile/directory
image: your-image-tag
ports:
- "8080:80"
volumes:
- ./www:/var/www
- ./nginx.conf:/etc/nginx/sites-enabled/default
你可以这样做:
FROM php:8.0.2-apache
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y mariadb-client libxml2-dev
RUN apt-get autoremove -y && apt-get autoclean
RUN docker-php-ext-install mysqli pdo pdo_mysql xml
COPY --from=composer /usr/bin/composer /usr/bin/composer
参数 COPY --from= 应该可以解决您的问题。
FROM php:7.3-fpm-alpine
RUN docker-php-ext-install pdo pdo_mysql
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer
RUN apk update
RUN apk upgrade
RUN apk add bash
RUN alias composer='php /usr/bin/composer'