运行`docker-php-ext-install`从PHP以外的容器
我有一个Docker(docker-compose)的问题。 我想使用docker-compose.yml
来安装一些PHP扩展,但是我无法做到这一点,因为我的.yml有FROM ubuntu
而不是FROM php
。 有什么办法可以实现或访问docker-php-ext-install
?
Dockerfile
FROM ubuntu:16.04 RUN apt -yqq update RUN apt -yqq install nginx iputils-ping RUN docker-php-ext-install pdo pdo_mysql mbstring WORKDIR /usr/local/src COPY docker/nginx/dev.conf /etc/nginx/conf.d/dev.conf COPY docker/nginx/nginx.conf /etc/nginx/nginx.conf CMD ["nginx"]
泊坞窗,compose.yml
version: "2" services: mariadb: image: mariadb environment: - MYSQL_ALLOW_EMPTY_PASSWORD=1 - MYSQL_ROOT_PASSWORD= phpmyadmin: image: phpmyadmin/phpmyadmin ports: - "8080:80" restart: always environment: - PMA_HOST=mariadb links: - mariadb php: image: php:7.1.1-fpm ports: - "9000:9000" volumes: - .:/dogopic links: - mariadb nginx: build: . ports: - "8000:80" volumes: - .:/dogopic links: - php
控制台输出(片段)
Step 5/9 : RUN docker-php-ext-install pdo pdo_mysql mbstring ---> Running in 445f8c82883d /bin/sh: 1: docker-php-ext-install: not found
新解决scheme
经过4个月的深入研究,经过无数个不眠之夜的学习Dockerfiles的数小时之后,终于find了正确的答案 !
你所要做的就是为特定的服务创build新的Dockerfile,在这种情况下, php
:
php/Dockerfile
FROM php:7.1.1-fpm RUN apt -yqq update RUN apt -yqq install libxml2-dev RUN docker-php-ext-install pdo_mysql RUN docker-php-ext-install xml
然后在docker-compose.yml
文件中链接到它,就像这样:
services: // other services php: build: ./php ports: - "9000:9000" volumes: - .:/dogopic links: - mariadb
请看build
参数 – 它指向新Dockerfile所在的目录。
旧解决scheme
我绕过这个问题。 我已经想通了,我仍然可以使用以下命令运行这个docker-php-ext-install
脚本:
docker-compose exec <your-php-container> docker-php-ext-install pdo pdo_mysql mbstring
由于方便,我创build了这个简单的batch file,以简化组成容器只需一个命令: ./docker.bat
@ECHO OFF docker-compose build docker-compose exec php docker-php-ext-install pdo pdo_mysql mbstring docker-compose up
docker-php-ext-install
不是一些本地的dockerfunction。 如果你仔细阅读php docker hub页面,你会发现,这只是一个脚本,使安装过程变得简单:
我们提供了帮助程序脚本
docker-php-ext-configure
,docker-php-ext-install
和docker-php-ext-enable
以便更轻松地安装PHP扩展。
如果你的图像是基于ubuntu
而不是php
,你可能会在github上finddocker-php-ext-install
。
但是由于你的Dockerfile
是FROM ubuntu
,所以我build议你用apt-get
安装php:
FROM ubuntu:16.04 RUN apt -yqq update RUN apt -yqq install nginx iputils-ping RUN apt-get install -y php php-fpm pdo-mysql php-mbstring
不要忘记设置nginx
来使用php-fpm。 为此,我亲自使用start.sh
脚本,该脚本在容器中启动php-fpm
和nginx
:
php-fpm -D nginx -g "daemon off;"
在Dockerfile
运行脚本。 不是nginx
:
COPY start.sh /tmp/start.sh CMD ["/tmp/start.sh"]
- NodeJS – 获取独特的设备指纹
- Bluemix Kubernetes docker部署查询
- 如何在构buildDocker镜像时习惯性地访问敏感数据?
- 等效于Docker Compose v3中的volumes_from
- 如何在不同的Docker容器中运行uWSGI和NGINX
- 从另一个容器连接到在Docker容器中运行的无头nREPL
- 如何将主机的IP地址传递给Docker中的容器?
- 无法注册图层:处理tar文件时出错(退出状态1):lchown / bin / bzcmp:没有这样的文件或目录
- 如何使用curl执行“docker检查点创buildcontainer_id checkpoint_id”?