Home > Mobile >  Error 'could not translate host name' running Laravel migration in Docker PostgreSQL conta
Error 'could not translate host name' running Laravel migration in Docker PostgreSQL conta

Time:12-31

Well, I have a container with PostgreSQL that I connect to from Laravel showing records on the screen. The Laravel container access the PostgreSQL data ok. This is the result:

object(Illuminate\Support\Collection)#463 (2) {
  ["items":protected]=>
  array(2) {
    [0]=>
    object(stdClass)#466 (3) {
      ["pru_id"]=>
      int(1)
      ["pru_name"]=>
      string(5) "george"
      ["pru_years"]=>
      int(45)
    }
    [1]=>
    object(stdClass)#467 (3) {
      ["pru_id"]=>
      int(2)
      ["pru_name"]=>
      string(5) "paul"
      ["pru_years"]=>
      int(30)
    }
  }               
}

So far very good!

But when I try to run migrations, with php artisan migrate, I get:

SQLSTATE[08006] [7] could not translate host name "pgcontainer" to address: Name or service not known

Checking the connection, the db_host: (pgcontainer)

'pgsql' => [
    'driver' => 'pgsql',
    'url' => env('DATABASE_URL'),
    'host' => env('DB_HOST', 'pgcontainer'),
    'port' => env('DB_PORT', '5432'),
    'database' => env('DB_DATABASE', 'mydatabase'),
    'username' => env('DB_USERNAME', 'myuser'),
    'password' => env('DB_PASSWORD', 'mypass'),
    'charset' => 'utf8',
    'prefix' => '',
    'prefix_indexes' => true,
    'schema' => 'public',
    'sslmode' => 'prefer',
],

I tried to modify the host, because I understand what it does not recognize, changing pgcontainer for 127.0.0.1, but when doing it two interesting things happen:

  1. ON THE SCREEN: It no longer shows the records on the screen, because the Laravel container no longer accesses the PostgreSQL:

SQLSTATE[08006] [7] could not connect to server: Connection refused Is the server running on host "127.0.0.1" and accepting TCP/IP connections on port 5432

  1. SSH - PHP ARTISAN MIGRATE: Now Laravel can see the PostgreSQL container but it cannot authenticate (the password is correct since before it shows records on the screen):

SQLSTATE[08006] [7] FATAL: password authentication failed for user "mydatabase"

Any idea?

CodePudding user response:

If I understand correctly, you have one container with Postgres, and a different container with Laravel. The connection from the Laravel -> Postgres containers works fine.

The error you are seeing suggests you are running php artisan migrate on your host, not in a container. But your host does not know what pgcontainer means - Docker resolves containers by name, but your host can't.

You should be running php artisan <anything> from inside the container where PHP/Laravel is, for eg:

docker exec your_laravel_container_name php artisan migrate

This way artisan runs inside the container, and host name resolution works just the same as it does for Laravel. Do not change your .env or config, artisan is part of Laravel and needs the same config as the Laravel application itself.

  • Related