Eu criei uma imagem do ubuntu com nginx, php e postgres.
Quero conectar o banco de dados postgres em minha imagem atual com pgadmin
localizado em minha máquina local.
Tentei usar o docker inspector para tentar usar o ip da imagem para fazer uma conexão com meu pgadmin local, mas sem muito sucesso. Também tentei configurar algumas portas no local para fazer a conexão funcionar.
postgresql
docker
pgadmin
Rigoxls
fonte
fonte
Respostas:
É uma pergunta válida não saber por que as pessoas sentem "não parece possível responder a essa pergunta".
Então, eis como faço o que você está tentando fazer:
Puxe a imagem do postgres do Docker Hub
docker pull postgres:latest
Execute o contêiner usando o comando abaixo
docker run -p 5432:5432 postgres
Usando o comando de inspeção do docker, encontre o IP
Use esse IP, PORTA, nome de usuário e senha para se conectar em PGADMIN
Você também pode fazer um telnet simples como abaixo para confirmar se você pode acessar o contêiner docker postgres:
telnet IP_ADDRESS 5432
fonte
-p 5432:5432
, você não precisa encontrar o IP do contêiner, você pode usar o IP do seu host, ou127.0.0.1
ou apenaslocalhost
O que eu fiz com sucesso no windows 10 executando o docker para windows 1.12.6 (9655), a etapa é como abaixo:
Puxe o último postgres
docker pull postgres:latest
execute o contêiner postgres:
docker run -d -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password123 --name db-my -p 5432:5432 --restart=always postgres
Em seguida, instalei a última versão do pgAdmin4 do site pgadmin
Execute pgAdmin 4, crie um novo servidor e insira o seguinte Host: 127.0.0.1 Porta: 5432 Nome de usuário: senha de usuário: senha123
fonte
Alternativamente, você pode combinar Postgres e pgadmin em um
docker-compose
arquivo e faça login como usuário[email protected]
, pwd:admin
. Para adicionar o servidor Posgres, use hostnamepostgres
, port5432
.fonte
docker network ls
, verá uma ponte para a rede postgres-to-pgadmin (a minha é postgres_postgres). Então, você podedocker network inspect postgres_postgres
ver dois containers, cada um com um ip / hostname. Pegue o do Postgres (o meu é postgres_db_1) para conectar com sucesso a partir do pgAdmin.Isso é o que eu fiz
para postgres
docker run -p 5432:5432 --name container-postgresdb -e POSTGRES_PASSWORD=admin -d postgres
para pgadmin
String de conexão para pgadmin
Funciona bem!!!!!
fonte
Unable to connect to server: could not translate host name "host.docker.internal" to address: Try again
No meu caso eu poderia resolver o problema de inspecionar minha imagem postgre através do comando
Então, usei o endereço IP do docker para configurar minha conexão do pgadmin 4 e deu tudo certo. Obrigado a @Afshin Ghazi
fonte
Se o objetivo do pgAdmin for ser executado no mesmo host / convidado do Ubuntu, você precisará vincular o contêiner postgres, para que possa ser resolvido por um nome.
1. Execute um contêiner postgres:
docker run --name some-postgres -e POSTGRES_PASSWORD=postgres -d postgres
2. Execute o contêiner pgAdmin:
docker run -p 80:80 --link some-postgres -e "[email protected]" -e "PGADMIN_DEFAULT_PASSWORD=postgres" -d dpage/pgadmin4
3. Agora, ao adicionar um novo servidor no aplicativo web phAdmin, use
some-postgres
como nome do servidorObserve
--link some-postgres
quando estávamos abrindo o pgAdmin. Este comando torna o contêiner postgres visível para o contêiner pgAdmin.fonte
Warning: The --link flag is a legacy feature of Docker. It may eventually be removed. Unless you absolutely need to continue using it, we recommend that you use user-defined networks to facilitate communication between two containers instead of using --link.
Eu também não tive sorte--link
em fazer meu contêiner pgadmin falar com meu contêiner postgres. Posso acessar o postgres a partir de uma instalação local do pgadmin.Eu incluí isso no arquivo docker yaml para obter o banco de dados e o pgAdmin:
O nome de usuário do postgres é alphaone e a senha é xxxxxxxxxxx.
Faça um
docker ps
para obter o id do contêiner e entãodocker inspect <dockerContainerId> | grep IPAddress
por exemplo:
docker inspect 2f50fabe8a87 | grep IPAddress
Insira o endereço IP no pgAdmin e as credenciais do banco de dados usadas no docker:
fonte
localhost
não funcionou.Se você verificou que o PostgreSQL está em execução e pode se conectar a ele com uma cópia local do PgAdmin ...
A resposta é simples: use
host.docker.internal
isteadlocalhost
para o PgAdmin rodando dentro do Dockerfonte
No meu caso, eu tinha um contêiner PostgreSQL, então não mudei meu contêiner ou criei uma abordagem docker-compose, precisei pgadming depois de alguns meses para instalar o PostgreSQL, então esta é minha abordagem:
docker inspect my_container_id_postgreSQL
A rede atribuída ao PostgreSQL foi:
"Redes": {"docker_default": {"IPAddress": "172.18.0.2", ...}}
Executei meu PGADMIN com
--network
comando.docker run -p 85:80 --network docker_default -e '[email protected]' -e 'PGADMIN_DEFAULT_PASSWORD = SuperSecret' -d dpage / pgadmin4
Insira o endereço IP no pgAdmin e as credenciais do banco de dados usadas no docker.
Espero que isso possa ser útil para alguém. Saudações.
fonte
Para encontrar o IP do contêiner, use o seguinte comando
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
Referência: como obter o endereço IP de um contêiner Docker do host
fonte
Você deve expor a porta do postgres no contêiner para seu sistema local. Você faz isso executando seu contêiner assim:
docker run -p 5432:5432 <name/id of container>
ao conectar-se com seu cliente GUI ou CLI, certifique-se de usar o endereço IP, não o localhost, mesmo se o seu endereço IP for o endereço IP do host local.
docker ps
fornecerá o endereço IP em que seu contêiner do postgres está.fonte
Depois de enfrentar esse problema por dois dias, consegui resolvê-lo.
solução deste problema já é respondida por pessoas como do inspecionar
docker inspect CONTAINER_ID
mas, ao executar este comando, obtive muitos logs como Host Config Config Network Settings etc., então fiquei confuso qual endereço IP adicionar na conexão pgAdmin porque tentei 0.0.0.0 e config, host, networkSettings diferente -2 IPAddress no logs, mas finalmente funciona depois de tentar muito.
ele funciona com qual IP, temos que adicionar esse endereço IP de rede (que criamos para conectar o postgres e o pgAdmin .)
como no meu caso quando corro: -
então temos que adicionar NetworkSettings -> Rede -> Postgres (rede criada pela mina) -> IPAddress, ou seja, "IPAddress": "192.168.16.2".
Depois de adicionar esse ip ele vai funcionar.
Eu espero que isso ajude.
fonte
Você também pode criar uma rede de ponte Docker para fazer isso.
$ docker network create pgnet a0ae44aaf6f806fc37302e4c603b4828c4edb8d487fd9cd90e2fb19ae1d5c65f $ docker run --detach \ --name pg \ --network pgnet \ --publish 5432:5432 \ --restart always \ --env POSTGRES_PASSWORD=pg123 \ --volume ${PWD}/data:/var/lib/postgresql/data \ postgres:12.1 b60611e43727dabe483c1f08fdf74961b886ce05b432a10a0625bd1b6db87899 $ docker run --detach \ --name pgadm \ --network pgnet \ --publish 8000:80 \ --volume ${PWD}/pgadmin:/var/lib/pgadmin \ --env [email protected] \ --env PGADMIN_DEFAULT_PASSWORD=pgadm123 \ dpage/pgadmin4:4.20 27f9ce1c1c4c383ee1507f4e2d88f6ef33d4fcf5b209a8a03b87519f90d56312
Abra http: // localhost: 8000 /
O nome do host / endereço usado acima é o nome do container Postgres dado por
--name pg
fonte
Para encontrar o ip correto para seu contêiner, execute os seguintes comandos:
Verifique o ID do contêiner:
Para verificar o IP correto do seu contêiner:
A configuração do PostgreSQL e do PgAdmin com Docker é simples, se não estiver correta, recomendo refazer a configuração do zero, se o seu problema for mais profundo.
Aqui está um script que desenvolvi para resolver esse problema. script-sh / install-docker-postgres-and-pgadmin
fonte
Para macOS, os IPs de
postgres
epgadmin4
são diferentes dosdocker inspect
fornecidos. TipoDê uma olhada no nome do servidor à esquerda. É
default
por padrão.docker-machine ip default
será o IP que você precisa usar para ambos ,pgadmin4
no navegador epostgres
naspgadmin4
configurações.fonte
A solução que experimentei e funcionou para mim foi criar um arquivo docker compose onde incluí postgress e pgadmin como serviços. Para mais detalhes: Conectando o pgadmin ao postgres no docker
fonte