【问题标题】:Docker compose command no such fileDocker compose 命令没有这样的文件
【发布时间】:2017-12-15 12:43:33
【问题描述】:

我一直在尝试将我的 php wev 应用程序(基于 laravel 构建)容器化,但遇到了一些问题

首先我发现容器在执行命令后退出,所以我将构建脚本移动到不同的容器(迁移和作曲家安装)

我制作了一个名为 init.sh 的脚本,其中包含构建指令,但每当我从 docker-compose.yml 中的 command 运行它们时,我都没有得到这样的文件或目录。

这是我的 dockerfile

FROM nimmis/apache-php7


COPY apache_default /etc/apache2/sites-available/000-default.conf

RUN a2enmod rewrite

RUN service apache2 restart

这是我的 docker-compose.ym

version: "3"

volumes:
    db-data:
        external: false

services:
    db:
        image: mysql/mysql-server
        env_file: .env
        volumes:
            - db-data:/var/lib/mysql-server

    migrations:
        build: .
        env_file: .env
        volumes:
            - .:/var/www/html/books
        depends_on:
            - app
        command: 
            # - /var/www/html/books/artisan migrate 
            # - chmod 777 /var/www/html/init.sh
            - /var/www/html/books/init.sh
            # - /var/www/html/init.sh
        environment:
            - ALLOW_OVERRIDE=true

    app:
        build: .
        env_file: .env
        volumes:
            - .:/var/www/html/books
        ports: 
            - "8081:80"
        depends_on:
            - db
        environment:
            - ALLOW_OVERRIDE=true

注释部分是正确运行脚本的不同尝试。

我正在尝试使用 docker 工具箱在 Windows 10 上运行它

我做错了什么?这是正确的方法吗?

【问题讨论】:

  • 它说没有这样的文件是哪一个?
  • Dockerfile 中有什么?什么是 init.sh?
  • 我已经更新了我的问题...... @JayBlanchard 迁移一个说没有这样的文件它试图运行命令

标签: php laravel docker docker-compose containers


【解决方案1】:

RUN 指令将在容器构建时执行容器中的某些内容,而不是在容器执行时执行。

为此,您的 Dockerfile 应该看起来更像这样:

FROM nimmis/apache-php7


COPY apache_default /etc/apache2/sites-available/000-default.conf

RUN a2enmod rewrite

ENTRYPOINT ["bash", "/path/to/init.sh"]
CMD ["apache2", "-DFOREGROUND", "-k", "start"]

Entrypoint 指令将在 CMD 指令之前运行,无论您是否在启动时将命令传递到容器中。

因此,您需要让 init.sh 执行容器传递给它的命令:

#!/bin/bash
# init.sh

# todo: whatever init.sh does...

# Execute the CMD passed to the container:
exec "$@"

【讨论】:

    【解决方案2】:

    所以我发现出了什么问题......这是一个权限问题。

    当我将权限设置为可执行时,它工作正常......

    所以现在我要做的就是将我的 dockerfile 调整为

    FROM nimmis/apache-php7
    
    COPY . /var/www/html/books
    
    COPY start.sh /
    
    RUN chmod +x /start.sh
    
    COPY apache_default /etc/apache2/sites-available/000-default.conf
    
    RUN a2enmod rewrite
    
    RUN service apache2 restart
    

    【讨论】:

      【解决方案3】:

      不是这个

        volumes:
                  - .:/var/www/html/books
      

      使用

       volumes:
                  - folder_containg_sh:/var/www/html/books  #relative path to script
      

      在 docker-compose 文件中

      【讨论】:

      • 您不能将文件作为卷引用
      • 但是可以附加包含文件的文件夹,好的,我在回答中使用了文件,我会更新
      • 当然可以;如果它是一个文件夹,那么你已经准备好了 :-) 你不能直接引用一个文件,因为它不会正确安装。干杯!
      • . 指的是包含.sh 文件的项目目录......所以它应该可以工作,但它不是......任何想法?
      • 不确定是否跳过,因为文件和文件夹很多,请尝试制作单独的文件夹并在卷部分提供该路径。为什么你不能在构建 docker 镜像的时候添加文件呢?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-24
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      相关资源
      最近更新 更多