繁体   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