[英]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.