Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Visualizar tabelas criadas no container por meio do Client do SGBD

Fala queridos!

Gostaria de criar um banco Postgres por meio do Sequelize. Porém, quando eu subo o banco em um container, eu não consigo ver as tabelas nem registros por meio do DBeaver (que é o software que eu uso e está instalado na minha máquina). Onde vão parar essas tabelas?

Tentei o seguinte:

1º método: criando apenas um container para o banco:

docker  run --name db-postgres //seta o user e o password do banco -d -p 5432:5432  postgres

Consigo fazer a conexão no software (seja localhost ou passando o IP criado pelo container), tudo certo. Mas quando rodo as migrations para criação do banco e das tabelas, nada acontece (nem mensagens de erro no meu código), aponta como se tudo tivesse corrido conforme as tabelas foram criadas.

2º método: criando containeres para o banco e para aplicação com o Docker-Compose:

version: '3.2'

services:
  postgres:
    image: postgres
    container_name: postgresdb
    environment:
      - POSTGRES_PASSWORD=docker
      - POSTGRES_USER=docker
    restart: always
    networks:
      - sqlnode-network
    ports:
      - "5432:5432"

  sqlnode:
    build:
      dockerfile: ./Dockerfile
      context: .
    image: carloscarrinho/sqlnode
    container_name: sqlnode
    ports:
      - "3333:3333"
    volumes:
      - .:/var/www/
    networks:
      - sqlnode-network
    depends_on:
      - postgres

networks:
  sqlnode-network:
    driver: bridge
2 respostas
solução!

Olá Cadu, tudo bem? Você poderia entrar no container do Postgres quando ele estiver em execução, para isso você pode utilizar um comando como:

docker exec -it db-postgres

E acessar o postgres diretamente usando o POSTGRES_USER e o POSTGRES_USER que você definiu e verificar se as tabelas foram criadas ou não. E outra coisa que não consegui identificar, em que momento você criou o banco de dados dentro do container? Aparentemente, você cria e sobe o container de duas formas, usando o docker e também usando o docker-compose, porém não vi quando você criou o banco de dados, e pode ser esse o problema, o banco de dados não existir no container. Poderia explicar melhor?

Fico aguardando retorno!

Eaí Jonilson,

Desculpe a demora. Vamos lá:

Estava desenvolvendo um projetinho aqui simples para integrar os conhecimentos em NodeJs + Docker + Postgres + Sequelize. A ideia era criar uma API de cadastro de usuários e seus endereços entre outras informações.

O meu problema foi que aparentemente está tudo certo com a criação dos containeres, da conexão com o banco, criação das tabelas, migrations, etc. Porém, eu não conseguia visualizar as tabelas no SGBD (no caso o DBeaver).

Achei que o problema estava na conexão entre os containeres. Contudo, com o seu insight aí através do comando:

docker exect -it postgres-db psql -U docker

Acessei estas informações:

docker=# \l
                              List of databases
   Name    | Owner  | Encoding |  Collate   |   Ctype    | Access privileges 
-----------+--------+----------+------------+------------+-------------------
 docker    | docker | UTF8     | en_US.utf8 | en_US.utf8 | 
 postgres  | docker | UTF8     | en_US.utf8 | en_US.utf8 | 
 sqlnode   | docker | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | docker | UTF8     | en_US.utf8 | en_US.utf8 | =c/docker        +
           |        |          |            |            | docker=CTc/docker
 template1 | docker | UTF8     | en_US.utf8 | en_US.utf8 | =c/docker        +
           |        |          |            |            | docker=CTc/docker
(5 rows)

docker=# \c sqlnode 
You are now connected to database "sqlnode" as user "docker".
sqlnode=# \dt
            List of relations
 Schema |     Name      | Type  | Owner  
--------+---------------+-------+--------
 public | SequelizeMeta | table | docker
 public | users         | table | docker
(2 rows)

Como você pode ver, as tabelas "users" (que registra os usuários) e "SequelizeMeta" (que registra as migrations) estão sendo criadas.

Entretanto ainda não consigo visualizar as tabelas, tanto utilizando o DBeaver, quanto o PgAdmin3.

O curioso é que aparece o banco "sqlnode", só não aparecem as tabelas.

De qualquer forma eu consegui entender aqui a lógica de conexão entre os containers. Tanto pelo Docker quanto com Docker-Compose, que é o foco deste curso.

Vou marcar como solucionado este tópico e continuar tentando entender qual o problema na visualização das tabelas.

Valeu muito obrigado!