简体   繁体   English

./docker/8.0 中的 DockerFile 与 ./vendor/laravel/sail/runtimes/8.0 中的 DockerFile

[英]DockerFile in ./docker/8.0 vs DockerFile in ./vendor/laravel/sail/runtimes/8.0

Good day,再会,

I got stumbled to a peculiar issue.我偶然发现了一个奇怪的问题。 I'm a newbie in Laravel Sail with Docker.我是 Docker 的 Laravel Sail 新手。 When I change the laravel service context to point to DockerFile in ./docker/8.0 which I used to add some scripts to install PHP SQL server drivers and ODBC the container wont start instead it gives message /usr/bin/env: 'bash\\r': No such file or directory ;当我将 Laravel 服务上下文更改为指向 ./docker/8.0 中的./docker/8.0 ,我曾经添加一些脚本来安装 PHP SQL 服务器驱动程序和 ODBC,容器不会启动,而是会提供消息/usr/bin/env: 'bash\\r': No such file or directory

version: '3'
services:
    laravel.test:
        build:
            context: ./docker/8.0
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: sail-8.0/app
        container_name: oncampus-webapp
        ports:
            - '${APP_PORT:-80}:80'
        environment:
            WWWUSER: '${WWWUSER}'
            LARAVEL_SAIL: 1
        volumes:
            - '.:/var/www/html'
        networks:
            - sail

The same scripts for PHP SQL server driver and ODBC when I add them to the DockerFile in ./vendor/laravel/sail/runtimes/8.0 and change the context of the laravel service in docker-compose.yml the container starts successfully.当我将 PHP SQL 服务器驱动程序和 ODBC 的相同脚本添加到 ./vendor/laravel/sail/runtimes/8.0 中的./vendor/laravel/sail/runtimes/8.0并在 docker docker-compose.yml更改 laravel 服务的上下文时,容器成功启动。

version: '3'
services:
    laravel.test:
        build:
            context: ./vendor/laravel/sail/runtimes/8.0 # Default context
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: sail-8.0/app
        container_name: oncampus-webapp
        ports:
            - '${APP_PORT:-80}:80'
        environment:
            WWWUSER: '${WWWUSER}'
            LARAVEL_SAIL: 1
        volumes:
            - '.:/var/www/html'
        networks:
            - sail

Here is my DockerFile which has the additional PHP SQL drivers and ODBC installation instructions这是我的 DockerFile,其中包含额外的 PHP SQL 驱动程序和 ODBC 安装说明

    FROM ubuntu:20.04
    
    LABEL maintainer="Taylor Otwell"
    
    ARG WWWGROUP
    
    WORKDIR /var/www/html
    
    ENV DEBIAN_FRONTEND noninteractive
    ENV TZ=UTC
    
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    
    RUN apt-get update \
        && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 \
        && mkdir -p ~/.gnupg \
        && chmod 600 ~/.gnupg \
        && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \
        && apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E5267A6C \
        && apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C300EE8C \
        && echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu focal main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
        && apt-get update \
        && apt-get install -y php8.0-cli php8.0-dev \
           php8.0-pgsql php8.0-sqlite3 php8.0-gd \
           php8.0-curl php8.0-memcached \
           php8.0-imap php8.0-mysql php8.0-mbstring \
           php8.0-xml php8.0-zip php8.0-bcmath php8.0-soap \
           php8.0-intl php8.0-readline \
           php8.0-msgpack php8.0-igbinary php8.0-ldap \
           php8.0-redis \
        && php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \
        && curl -sL https://deb.nodesource.com/setup_16.x | bash - \
        && apt-get install -y nodejs \
        && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
        && echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
        && apt-get update \
        && apt-get install -y yarn \
        && apt-get install -y mysql-client \
        && apt-get install -y postgresql-client \
        && apt-get -y autoremove \
        && apt-get clean \
        && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
    
    RUN pecl channel-update https://pecl.php.net/channel.xml \
        && pecl install swoole \
        && pecl clear-cache \
        && rm -rf /tmp/* /var/tmp/*
    
    RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.0
    
    # Start of PHP SQL Server Driver Entries
    # Add repository ODBC and Install the Microsoft ODBC driver for SQL Server
    RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
        # Ubuntu 20.04
        && curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list \
        && apt-get update \
        && ACCEPT_EULA=Y apt-get install -y msodbcsql17 \
        # optional: for bcp and sqlcmd
        && ACCEPT_EULA=Y apt-get install -y mssql-tools \
        && apt-get install -y gcc musl-dev make \
        # optional: for unixODBC development headers (The Microsoft ODBC driver’s installation page mentions that the development libraries are optional – they are not. So run the command below to avoid errors)
        && apt-get install -y unixodbc-dev
    
    # Install the PHP drivers for Microsoft SQL Server
    RUN apt-get update \
        && pecl channel-update pecl.php.net \
        #&& pecl channel-update https://pecl.php.net/channel.xml \
        #&& pecl install swoole \
        && pecl install sqlsrv pdo_sqlsrv \
        && pecl clear-cache \
        && rm -rf /tmp/* /var/tmp/*
    
    RUN /bin/bash -c 'source ~/.bashrc'
    RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
    
    RUN printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/8.0/mods-available/sqlsrv.ini
    RUN printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/8.0/mods-available/pdo_sqlsrv.ini
    RUN phpenmod sqlsrv pdo_sqlsrv
    # End of PHP SQL Server Driver Entries
    
    RUN groupadd --force -g $WWWGROUP sail
    RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
    
    COPY start-container /usr/local/bin/start-container
    COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
    COPY php.ini /etc/php/8.0/cli/conf.d/99-sail.ini
    RUN chmod +x /usr/local/bin/start-container
    
    EXPOSE 8000
    
    ENTRYPOINT ["start-container"]

And the start-container script和启动容器脚本

#!/usr/bin/env bash

if [ ! -z "$WWWUSER" ]; then
    usermod -u $WWWUSER sail
fi

if [ ! -d /.composer ]; then
    mkdir /.composer
fi

chmod -R ugo+rw /.composer

if [ $# -gt 0 ];then
    exec gosu $WWWUSER "$@"
else
    /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
fi

I'm running docker desktop on Microsoft Windows Platform with WSL2 using Ubuntu distro.我正在使用 Ubuntu 发行版在带有 WSL2 的 Microsoft Windows 平台上运行 docker 桌面。

I would appreciate for anyone to assist where am I missing a point between the two files.我很感激任何人帮助我在两个文件之间遗漏了一个点。

Thanks in advance提前致谢

I faced the same issue recently.我最近遇到了同样的问题。 I'm running Sail from Macos, and after running artisan sail:publish and made some tweaks for getting xdebug running as expected, it were working fine so I committed my changes.我正在从 Macos 运行 Sail,在运行 artisan Sailing:publish 并进行了一些调整以使 xdebug 按预期运行后,它运行良好,所以我提交了我的更改。 I switched to another branch and after that, I switched back and suddenly that error start to appear.我切换到另一个分支,在那之后,我切换回来,突然那个错误开始出现。

In my case was related with a Git misconfiguration for line endings formats.就我而言,这与行尾格式的 Git 配置错误有关。 So this is what I did:所以这就是我所做的:

1.- I installed dos2unix command line program for passing those files that I changed to the right format. 1.- 我安装了 dos2unix 命令行程序,用于传递我更改为正确格式的文件。

#Mac OS
$ brew install dos2unix
$ find docker/ -type f -exec dos2unix {} ;
$ dos2unix docker-compose.yml

2.- Remove previous images and containers with docker desktop. 2.- 使用 docker 桌面删除以前的图像和容器。

3.- Run sail up again 3.- 再次扬帆起航

4.- Change my git config ( input for Unix based systems, true for Windows): 4.- 更改我的 git 配置(基于 Unix 的系统的输入,Windows 为true ):

$ git config --global core.autocrlf input

Hope it can help anyone else.希望它可以帮助其他人。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM