[英]docker php container and local composer issue
好吧,我在 Windows 10 上使用 wamp-server 已经很长时间了,这很好,但现在我想使用 docker 并利用它的好处。 问题是我想在我的本地机器上使用我的 docker PHP 解释器,所以根据这个问题:
我找到了一个解决方案来使用这样的东西:
docker exec -i php73_fpm php %*
在php.bat
文件中,将它放在一个目录中并将其添加到环境变量中,看起来不错。 当我点击php -v
它会显示我在 docker 上的版本而不是本地的,所以应该没问题。 直到我尝试使用作曲家。 一旦我在 CMD 窗口中点击php composer
,它就会显示一条错误消息:
Could not open input file: C:\ProgramData\ComposerSetup\bin\composer.phar
这是因为我假设我将php.exe
路径更改为php.bat
? 和作曲家期待环境变量中的php.exe
路径? 如何强制作曲家使用我的 docker PHP 容器而不是本地安装的容器?
编辑:如果可能需要,我将在此处发布我的 docker-compose.yml 内容:
version: '3'
networks:
web_server:
driver: bridge
services:
nginx:
image: nginx
container_name: nginx_server
ports:
- "80:80"
- "443:443"
depends_on:
- php
- couchbase
command: [nginx-debug, '-g', 'daemon off;']
restart: unless-stopped
tty: true
volumes:
- ./docker/nginx/logs:/var/log/nginx
- ./docker/nginx/sites:/etc/nginx/conf.d
- ./src:/usr/share/nginx/html
networks:
- web_server
php:
container_name: php73_fpm
build:
context: ./docker/php-fpm
dockerfile: Dockerfile
working_dir: /usr/share/nginx/html
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: php73-fpm
SERVICE_TAGS: dev
ports:
- "9000:9000"
environment:
- COUCHBASE_HOST=couchbase
- COUCHBASE_BUCKET_NAME=default
- COUCHBASE_BUCKET_PASSWORD=
volumes:
- ./src:/usr/share/nginx/html
networks:
- web_server
couchbase:
image: couchbase
container_name: couchbase
ports:
- 8091:8091
- 8092:8092
- 8093:8093
volumes:
- ./docker/couchbase:/opt/couchbase/var
restart: unless-stopped
tty: true
networks:
- web_server
首先,这个答案的灵感来自@soju 关于在容器本身上安装 composer 的建议。
事实证明,我应该忘记我的本地作曲家并将其安装到我的容器中。 所以我在我的 php 容器的 Dockerfile 中使用这一行安装了它:
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
那么我应该从环境变量中删除 composer 目录,这些目录是:
C:\Users\[windows-username-here]\AppData\Roaming\Composer\vendor\bin
C:\ProgramData\ComposerSetup\bin\composer.phar
创建另一个 composer.bat 文件并将其放置在包含以下内容的位置:
docker exec -i php73_fpm composer %*
将文件路径添加到环境变量。 就是这样。
现在,当我使用composer require something
它会将我的命令发送到php73_fpm
容器并完成工作。 但是应该有一个我将在docker-compose.yml
文件中使用的文件夹的卷,所以当它创建composer.json
它会将它放在本地机器上的那个目录中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.