代码之家  ›  专栏  ›  技术社区  ›  Zac

Docker-安装Composer/bin/sh:1:php:notfound curl:(23)写入正文失败(0!=16133)

  •  0
  • Zac  · 技术社区  · 7 年前

    您好,我正在为我的laravel项目创建dockerfile。到目前为止,情况如下:

    FROM php:7.2-cli
    FROM nginx
    FROM node:8
    MAINTAINER zachary tyhacz
    
    # does not install mysql
    # mysql is outside container
    
    RUN apt-get update -y && apt-get install -y openssl zip unzip git
    RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
    
    WORKDIR /var/www/public
    COPY . /var/www/public
    
    COPY nginx.conf /etc/nginx/sites-available/domain
    RUN ln -s /etc/nginx/sites-available /etc/nginx/sites-enabled
    
    RUN npm install
    RUN composer install
    
    # sets up the database
    CMD php artisan migrate:fresh --seed
    
    # resets configuration files
    CMD php artisan config:cache
    
    # refreshes routes
    CMD php artisan route:cache
    
    # enables serve
    CMD php artisan serve --host=0.0.0.0 --port=436
    
    EXPOSE 8080/udp
    EXPOSE 8080/tcp
    EXPOSE 80/udp
    EXPOSE 80/tcp
    EXPOSE 436/tcp
    EXPOSE 436/udp
    

    当docker标记创建图像时,它将进入以下指令:

    Step 6/22 : RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

    /bin/sh: 1: php: not found
    curl: (23) Failed writing body (0 != 16133)
    

    我不确定出了什么问题。我认为可能是权限问题或目录问题。

    此外,我在帮助我创建此dockerfile时的参考资料如下: https://buddy.works/guides/laravel-in-docker

    1 回复  |  直到 7 年前
        1
  •  3
  •   Justin Howard    7 年前

    您只能使用一个基本映像 FROM 在Dockerfile中。基本上,这告诉了docker应该从什么开始。在你的情况下,你有几个 s、 看来Docker只是拿了你最后一个给它的,在这种情况下 node:8 . 所以PHP从未被安装过。

    RUN

    而且,不是使用多个 CMD 条目,使用一个小的启动shell脚本。例如

    #!/usr/bin/env bash
    set -e
    php artisan migrate:fresh --seed
    php artisan config:cache
    php artisan route:cache
    exec php artisan serve --host=0.0.0.0 --port=436
    

    start.sh 或者类似的,然后在Dockerfile中,使用

    CMD ["./start.sh"]
    

    然后,您可能还需要为nginx服务启动第二个容器。您可以使用docker run手动执行此操作,但我建议签出docker compose。它帮助您一次构建和运行多个容器。

    推荐文章