【问题标题】:Laravel dusk tests in gitlab with docker - Failed to connect to localhost port 9515: Connection refusedLaravel 黄昏在 gitlab 中使用 docker 进行测试 - 无法连接到 localhost 端口 9515:连接被拒绝
【发布时间】:2018-05-11 11:22:41
【问题描述】:

在 gitlab 的 docker 容器中运行 laravel-dusk 时,我收到一条错误消息,提示它无法连接到 localhost 上的端口 9515。

Failed to connect to localhost port 9515: Connection refused

我的 docker 文件如下所示:

# Set the base image for subsequent instructions
FROM php:7.1

# Replace shell with bash so we can source files
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

# Install packages
RUN apt-get update -yqq && apt-get install -y git wget curl libcurl4-gnutls-dev libicu-dev libmcrypt-dev libvpx-dev libjpeg-dev libpng-dev libxpm-dev zlib1g-dev libfreetype6-dev libxml2-dev libexpat1-dev libbz2-dev libgmp3-dev libldap2-dev unixodbc-dev libpq-dev libsqlite3-dev libaspell-dev libsnmp-dev libpcre3-dev libtidy-dev -yqq bzip2 libfontconfig xvfb chromium libmagickwand-dev

# Add chrome repo and install google-chrome-stable
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
RUN apt-get update
RUN apt-get install -y google-chrome-stable

# Install php environment
RUN docker-php-ext-install mbstring mcrypt pdo_mysql curl json intl gd xml zip bz2 opcache bcmath

# Install imagick
RUN pecl install imagick && docker-php-ext-enable imagick

# check installed modules
RUN php -m

# Install NVM
ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 8.1.4
RUN curl --silent -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash

# install node and npm
RUN source $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default

# add node and npm to path so the commands are available
ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

# Install Composer Package manager
ENV COMPOSER_ALLOW_SUPERUSER 1
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && php composer-setup.php \
    php -r "unlink('composer-setup.php');" && mv composer.phar /usr/local/bin/composer

# Update packages
RUN apt-get update

# Xdebug
RUN pecl install -o -f xdebug \
&& rm -rf /tmp/* \ && docker-php-ext-enable xdebug

# Clear out the local repository of retrieved package files
RUN apt-get clean


# Install Laravel Envoy
RUN composer global require "laravel/envoy=~1.0"

# confirm installed versions
RUN node -v
RUN npm -v
RUN php -v
RUN google-chrome-stable --version
RUN composer --version
RUN php -m

EXPOSE 9515

那么我的 gitlab-ci 文件如下所示:

image: registry.gitlab.com/path-to-repo/repo-name:latest

# Select what we should cache
cache:
    paths:
    - vendor/

services:
- mysql:5.7

variables:
    # Configure mysql service (https://hub.docker.com/_/mysql/)
    MYSQL_DATABASE: database-name
    MYSQL_ROOT_PASSWORD: database-password
    DB_HOST: mysql
    DB_USERNAME: root

stages:
  - test

unit_test:
  stage: test
  script:
    - cp .env.runnable .env
    - composer install
    - php artisan config:clear
    - php artisan key:generate
    - php artisan migrate --seed
    - php artisan db:seed --class=TestSeeder
    - vendor/bin/phpunit --coverage-text --colors=never
    - php artisan env
    - php artisan dusk

一开始我以为是因为我没有暴露 9515 端口,但是我在 Dockerfile 中暴露了这个。但是,现在我不知道问题可能是什么。此端口用于另一个进程是否存在问题?会不会是 Chromedriver 在不同的端口上运行?

【问题讨论】:

    标签: docker gitlab laravel-dusk


    【解决方案1】:

    在您的 gitlab-ci 文件中尝试将 php artisan dusk 替换为:

    php artisan serve & php artisan dusk
    

    【讨论】:

      【解决方案2】:

      我收到 9515 连接被拒绝错误,然后我找到了这个 GitHub issue 并将这些依赖项添加到我的 dockerfile 中(授予我使用自定义 ubuntu 映像)。我不需要添加 GitHub 评论提到的任何其他内容(没有脚本等)。

      FROM ubuntu:18.04
      
      # ... my other previous dependencies (PHP, etc.)
      
      RUN apt-get update && \
        apt-get -y install libxpm4 libxrender1 libgtk2.0-0 libnss3 libgconf-2-4 && \
        apt-get -y install chromium-browser && \
        apt-get -y install xvfb gtk2-engines-pixbuf && \
        apt-get -y install xfonts-cyrillic xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable && \
        apt-get -y install imagemagick x11-apps && \
        apt-get upgrade -y && \
        apt-get clean && \
        rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
      

      另外,对于本地开发,我需要更新我的.env(或使用.env.dusk.local)APP_URL:指向我的docker主机。

      APP_URL=host.docker.internal:8000
      

      对于 GitLab,您可以尝试使用 docker 主机更新您的 .env APP_URL,方法是在 before_script 中添加额外的设置(在将 .env.example 复制到 .env 之后)。 (host.docker.internal 在 docker for linux 中不可用)。另外,请注意,您的容器需要net-tools 才能使用 netstat 命令。

      before_script:
      # ...
      - docker_host=$(netstat -nr | grep '^0\.0\.0\.0' | awk '{print $2}') && sed -i "s|APP_URL=http://0.0.0.0|APP_URL=http://${docker_host}|" .env
      

      APP_URL=http://0.0.0.0 是您现有 .env 文件中已有内容的值。

      【讨论】:

        猜你喜欢
        • 2019-10-11
        • 1970-01-01
        • 1970-01-01
        • 2017-06-21
        • 2020-11-20
        • 2020-12-18
        • 2019-01-07
        • 2021-09-08
        • 2015-10-19
        相关资源
        最近更新 更多