Eu me deparei com esse erro também.
Alguns parâmetros estão errados na configuração do sistema.
Verifica o arquivo .env, na raiz, que tem as variáveis que serão usadas nos serviços.
Para fazer esse teste de container, antes do docker_compose.yml, eu tive que alterar a primeira linha do arquivo .env, onde tem o nome do host para "localhost", para o sistema encontrar onde o banco está instalado.
DB_HOST=localhost
Comigo também aconteceu um erro na conexão do banco, porque o usuário configurado no arquivo .env não existia no PostgreSQL. Assim como foi preciso criar o banco antes de rodar o container, também tive que criar o usuário "root", com senha "root", para adequar o servidor do banco aos parâmetros de configuração. Utilizei esses comandos:
Primeiro vamos entrar no prompt do PostgreSQL:
sudo -u postgres psql
Depois criei um usuário chamado root:
create user root superuser;
E alterei a senha do usuário para "root":
alter role root password 'root';
E assim o comando abaixo funciona.
npm run typeorm migration:run
Mas é importante alterar depois!!!
Como o intuito é fazer tudo rodar em containers separados, o contanier do backend não vai rodar o banco de dados, então não pode apontar para localhost, então lá no arquivo .env você precisa alterar para o nome do container que você vai usar para o banco de dados. No arquivo docker-compose.yml do curso, tem essas linhas:
postgres:
image: postgres:latest
container_name: adopet-db
Então se continuar usando o mesmo padrão, no arquivo .env você altera a primeira linha para:
DB_HOST=adopet-db
Continuando ao longo do curso, pode ser que você precise fazer mais algumas alterações no arquivo docker-compose.yml, mas vai passo-a-passo que no final dá certo.