【问题标题】:Install cURL compiled with OpenSSL and zlib in Dockerfile在 Dockerfile 中安装使用 OpenSSL 和 zlib 编译的 cURL
【发布时间】:2016-03-14 18:46:15
【问题描述】:

我需要通过 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+需要的库,但没有结果。

【问题讨论】:

    标签: php apache curl docker debian


    【解决方案1】:

    您的 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 中的所有文件/目录(通常是源代码的位置等,如数据和/或配置文件),您在其中执行命令到容器内部的指定位置在 unix 中一个句号,如 。表示当前目录so上面的命令

    COPY . /usr/src/myapp
    

    会将当前目录中的所有文件和目录从主机(您在键入 docker build 命令时使用的那个)复制到名为 /usr/src/myapp 的容器目录中

    WORKDIR 将目录更改为容器提供的目录

    最后,CMD 启动服务器,一旦您启动容器,该服务器就会嗡嗡作响

    【讨论】:

    • 谢谢。我在 Dockerfile 中阅读了 COPY 的参考资料,但仍然不明白我应该复制什么。我的意思是我在 docker-compose.yaml 中映射卷。当容器从“project-web-server”运行服务器时,容器与我的本地项目文件一起工作。但是带有 SSL 和 zlib 的 cURL 不是关于我脚本中的 phpinfo 和代码错误的 apache 扩展。
    • 一个 Dockerfile 只是一系列命令,它们被执行来创建你的 docker 镜像......你需要使用 COPY 命令将你的本地项目文件传输到容器中,这就是 COPY 。 /some/path/inside/container 正在做......我建议你首先使用一个更简单的 docker 容器......记住每个容器只有一个进程
    猜你喜欢
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    相关资源
    最近更新 更多