Docker compose命令没有这样的文件

时间:2017-12-15 12:43:33

标签: php laravel docker docker-compose containers

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

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

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

这是我的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 toolbox在Windows 10上运行它

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

3 个答案:

答案 0 :(得分: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 "$@"

答案 1 :(得分:1)

所以我弄清楚出了什么问题......这是一个权限问题。

当我将权限设置为可执行时,它工作得很好......

所以现在我所要做的就是将我的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

答案 2 :(得分:0)

而不是这个

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

使用

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

在docker-compose文件中