使用Docker运行Laravel artisan命令时连接被拒绝

I'm running Laravel 5.4 in Docker. This is my docker-compose.yml file:

version: '2'

services:
  app:
    container_name: laravel_app
    image: webdevops/php-apache-dev:ubuntu-16.04
    links:
      - mysql
    depends_on:
      - mysql
    ports:
      - 8888:80
    volumes:
      - .:/app
    environment:
      docker: 'true'
      WEB_DOCUMENT_ROOT: '/app/public'
      WEB_NO_CACHE_PATTERN: '\.(.*)$$'
      working_dir: '/app'
  mysql:
    image: mariadb:latest
    ports:
      - 8889:80
    environment:
      MYSQL_ROOT_PASSWORD: 'dev'
      MYSQL_DATABASE: 'dev'
      MYSQL_USER: 'dev'
      MYSQL_PASSWORD: 'dev'

This is the relevant part of my .env file:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=8889
DB_DATABASE=dev
DB_USERNAME=dev
DB_PASSWORD=dev

I am able to see the Laravel welcome page - that side of things works. But when I run php artisan migrate I get this error:

SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = dev and table_name = migrations)

I have tried fiddling with the host and port parameters in the .env file.

First edit your docker-compose.yml.

mysql:
    image: mariadb:latest
    ports:
      - 8889:3306

After that set the correct DB port in .env.

Your DB port is wrong. You are trying to connect the exposed port inside the docker. In this case you should use DB_PORT=3306 in your .env.

If you don't want to set the DB port like in @kotapeter's answer, you can instead invoke artisan through docker by running:

$ docker exec -it <name of container> php artisan migrate

Looking at your docker-compose.yml, your container could be laravel_app_app_1 but you can check this by running docker ps