簡體   English   中英

docker php 容器和本地作曲家問題

[英]docker php container and local composer issue

好吧,我在 Windows 10 上使用 wamp-server 已經很長時間了,這很好,但現在我想使用 docker 並利用它的好處。 問題是我想在我的本地機器上使用我的 docker PHP 解釋器,所以根據這個問題:

設置從主機到 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM