我需要通过Dockerfile为Apache和php 5.6的Debian镜像安装使用OpenSSL和zlib编译的cURL。我尝试了许多方法,但是由于我对Linux没有足够的了解,因此失败了。我使用docker-compose来建立我的容器。 docker-compose.yaml看起来像:
version: '2'
services:
web:
build: .
command: php -S 0.0.0.0:80 -t /var/www/html/
ports:
- "80:80"
depends_on:
- db
volumes:
- $PWD/www/project:/var/www/html
container_name: "project-web-server"
db:
image: mysql:latest
ports:
- "192.168.99.100:3306:3306"
container_name: "project-db"
environment:
MYSQL_DATABASE: dbname
MYSQL_USER: dbuser
MYSQL_PASSWORD: dbpass
MYSQL_ROOT_PASSWORD: dbpass
作为构建脚本,我使用Dockerfile:
FROM php:5-fpm
RUN apt-get update && apt-get install -y \
apt-utils \
curl libcurl3 libcurl3-dev php5-curl php5-mcrypt
RUN docker-php-ext-install -j$(nproc) curl
'docker-php-ext-install'是来自基础镜像https://hub.docker.com/_/php/的帮助脚本
问题是在
$ docker build --rm .
成功之后,请不要使用cURL + SSL + zlib获取图像。在$ docker-compose up
之后,我有一个使用Apache + MySQL的工作容器,可以运行我的项目,但是我需要的库不在那里。您能否解释一下如何将这些扩展名正确添加到容器中的apache中?我什至尝试创建自己的Dockerfile并在那里构建apache + php +所需的库,但是没有结果。
最佳答案
您的Dockerfile不完整。您尚未执行COPY(或类似操作)将源代码执行的代码从主机执行到容器中。 Dockerfile的目的是与您的源代码一起设置环境,该环境通过启动进程(通常是服务器)来完成。
COPY code-from-some-location into-location-in-container
CMD path-to-your-server
...按照您引用的URL,这样会出现一个更完整的Dockerfile
FROM php:5.6-cli
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
CMD [ "php", "./your-script.php" ]
请注意COPY,它会以递归方式复制$ PWD中的所有文件/目录(通常是源代码的位置,如数据和/或配置文件的位置),在其中您将命令执行到容器内部的指定位置。在中。指示当前目录,因此上面的命令
COPY . /usr/src/myapp
将从主机(当前输入docker build命令时使用的主机)中当前目录中的所有文件和目录复制到名为/ usr / src / myapp的容器目录中
WORKDIR的作用是将目录更改为您提供的容器的目录
最终,CMD启动服务器,一旦启动容器,它就会嗡嗡作响
关于php - 在Dockerfile中安装使用OpenSSL和zlib编译的cURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35995599/