php mcrypt 在 docker 容器上启用后无法正常工作
php mcrypt not working after enabling it on docker container
我正在尝试通过 docker 在 AWS Elastic Beanstalk 上使用 Laravel 安装 nginx+php-fpm。我已经能够成功地启动并 运行ning,但是 Laravel 给了我一个错误:Mcrypt PHP extension required.
我已经能够通过容器内的命令 docker-php-ext-install
安装 mcrypt,但是在安装它并验证它已经安装并启用(通过 php-fpm -m |grep mcrypt
)之后,我仍然得到Mcrypt PHP extension required.
错误。每当我尝试重新启动 php-fpm 进程或重新启动容器时,elastic beanstalk 都会启动一个全新的容器,我必须重新安装 mcrypt(基本上擦干净了石板)。
我正在尝试为所有这些制作一个自动化脚本,有没有简单的方法可以做到这一点?
这是我的 Dockerrun.aws.json 文件:
{
"AWSEBDockerrunVersion": 2,
"volumes": [
{
"name": "php-app",
"host": {
"sourcePath": "/var/app/current/src"
}
},
{
"name": "nginx-conf",
"host": {
"sourcePath": "/var/app/current/nginx/conf.d"
}
}
],
"containerDefinitions": [
{
"name": "php-app",
"image": "php:5-fpm",
"essential": true,
"memory": 128,
"mountPoints": [
{
"sourceVolume": "php-app",
"containerPath": "/var/www/html"
}
]
},
{
"name": "nginx-proxy",
"image": "nginx",
"essential": true,
"memory": 128,
"portMappings": [
{
"hostPort": 80,
"containerPort": 80
}
],
"links": [
"php-app"
],
"mountPoints": [
{
"sourceVolume": "php-app",
"containerPath": "/var/www/html"
},
{
"sourceVolume": "awseb-logs-nginx-proxy",
"containerPath": "/var/log/nginx"
},
{
"sourceVolume": "nginx-conf",
"containerPath": "/etc/nginx/conf.d",
"readOnly": true
}
]
}
]
}
和我的 post-脚本,即容器旋转后的 运行(放置在 .ebextensions 中):
commands:
create_post_dir:
command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
ignoreErrors: true
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_delayed_job.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
DOCKER_ID=`docker ps -q --filter "ancestor=php:5-fpm"`
docker exec -i $DOCKER_ID bash -c "apt-get update"
docker exec -i $DOCKER_ID bash -c "apt-get install -y libmcrypt-dev"
docker exec -i $DOCKER_ID bash -c "docker-php-ext-install mcrypt pdo pdo_mysql"
您必须创建自己的图像并将其公开托管在 hub.docker.com 上。 Docker 容器在主命令停止时退出,因此无法在容器启动后重新启动 php-fpm 进程。
例如:
FROM php:5-fpm
RUN apt-get update
RUN apt-get install -y php5-mcrypt
然后将此图像推送到 docker 集线器。
您还可以设置 automated build,这样 docker 中心会为您构建此映像。
然后像这样更新您的构建定义图像:
"name": "php-app",
"image": "jamesnine/php:5-fpm",
"essential": true,
我正在尝试通过 docker 在 AWS Elastic Beanstalk 上使用 Laravel 安装 nginx+php-fpm。我已经能够成功地启动并 运行ning,但是 Laravel 给了我一个错误:Mcrypt PHP extension required.
我已经能够通过容器内的命令 docker-php-ext-install
安装 mcrypt,但是在安装它并验证它已经安装并启用(通过 php-fpm -m |grep mcrypt
)之后,我仍然得到Mcrypt PHP extension required.
错误。每当我尝试重新启动 php-fpm 进程或重新启动容器时,elastic beanstalk 都会启动一个全新的容器,我必须重新安装 mcrypt(基本上擦干净了石板)。
我正在尝试为所有这些制作一个自动化脚本,有没有简单的方法可以做到这一点?
这是我的 Dockerrun.aws.json 文件:
{
"AWSEBDockerrunVersion": 2,
"volumes": [
{
"name": "php-app",
"host": {
"sourcePath": "/var/app/current/src"
}
},
{
"name": "nginx-conf",
"host": {
"sourcePath": "/var/app/current/nginx/conf.d"
}
}
],
"containerDefinitions": [
{
"name": "php-app",
"image": "php:5-fpm",
"essential": true,
"memory": 128,
"mountPoints": [
{
"sourceVolume": "php-app",
"containerPath": "/var/www/html"
}
]
},
{
"name": "nginx-proxy",
"image": "nginx",
"essential": true,
"memory": 128,
"portMappings": [
{
"hostPort": 80,
"containerPort": 80
}
],
"links": [
"php-app"
],
"mountPoints": [
{
"sourceVolume": "php-app",
"containerPath": "/var/www/html"
},
{
"sourceVolume": "awseb-logs-nginx-proxy",
"containerPath": "/var/log/nginx"
},
{
"sourceVolume": "nginx-conf",
"containerPath": "/etc/nginx/conf.d",
"readOnly": true
}
]
}
]
}
和我的 post-脚本,即容器旋转后的 运行(放置在 .ebextensions 中):
commands:
create_post_dir:
command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
ignoreErrors: true
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_delayed_job.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
DOCKER_ID=`docker ps -q --filter "ancestor=php:5-fpm"`
docker exec -i $DOCKER_ID bash -c "apt-get update"
docker exec -i $DOCKER_ID bash -c "apt-get install -y libmcrypt-dev"
docker exec -i $DOCKER_ID bash -c "docker-php-ext-install mcrypt pdo pdo_mysql"
您必须创建自己的图像并将其公开托管在 hub.docker.com 上。 Docker 容器在主命令停止时退出,因此无法在容器启动后重新启动 php-fpm 进程。
例如:
FROM php:5-fpm
RUN apt-get update
RUN apt-get install -y php5-mcrypt
然后将此图像推送到 docker 集线器。
您还可以设置 automated build,这样 docker 中心会为您构建此映像。
然后像这样更新您的构建定义图像:
"name": "php-app",
"image": "jamesnine/php:5-fpm",
"essential": true,