nginx, php 및 postgres로 우분투 이미지를 만들었습니다.
pgadmin
내 로컬 컴퓨터에있는 현재 이미지의 postgres 데이터베이스를 연결하고 싶습니다 .
Docker 검사기를 사용하여 이미지 ip를 사용하여 로컬 pgadmin과 연결을 시도했지만 많은 성공을 거두지 못했습니다. 또한 연결이 작동하도록 로컬에서 일부 포트를 구성 해 보았습니다.
nginx, php 및 postgres로 우분투 이미지를 만들었습니다.
pgadmin
내 로컬 컴퓨터에있는 현재 이미지의 postgres 데이터베이스를 연결하고 싶습니다 .
Docker 검사기를 사용하여 이미지 ip를 사용하여 로컬 pgadmin과 연결을 시도했지만 많은 성공을 거두지 못했습니다. 또한 연결이 작동하도록 로컬에서 일부 포트를 구성 해 보았습니다.
답변:
사람들이 "그 질문에 대답하는 것이 불가능 해 보인다"고 느끼는 이유를 모른다는 것은 유효한 질문입니다.
그래서, 당신이하려는 일을하는 방법은 다음과 같습니다.
Docker Hub에서 postgres 이미지 가져 오기
docker pull postgres:latest
아래 명령을 사용하여 컨테이너를 실행하십시오.
docker run -p 5432:5432 postgres
Docker의 inspect 명령을 사용하여 IP 찾기
해당 IP, PORT, 사용자 이름 및 암호를 사용하여 PGADMIN에 연결하십시오.
Docker postgres 컨테이너에 액세스 할 수 있는지 확인하기 위해 아래와 같은 간단한 텔넷을 수행 할 수도 있습니다.
telnet IP_ADDRESS 5432
-p 5432:5432
컨테이너의 IP를 찾을 필요가 없습니다. 호스트 IP를 사용할 수 있습니다. 127.0.0.1
또는 그냥localhost
Windows 1.12.6 (9655) 용 도커를 실행하는 Windows 10에서 성공한 것은 다음과 같습니다.
최신 postgres 가져 오기
docker pull postgres:latest
postgres 컨테이너를 실행합니다.
docker run -d -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password123 --name db-my -p 5432:5432 --restart=always postgres
그런 다음 pgadmin 웹 사이트 에서 최신 버전의 pgAdmin4를 설치했습니다.
pgAdmin 4를 실행하여 새 서버를 만들고 다음과 같이 입력합니다. 호스트 : 127.0.0.1 포트 : 5432 사용자 이름 : 사용자 암호 : password123
또는 Postgres와 Pgadmin을 하나의 docker-compose
파일 에 결합 하고 user pgadmin4@pgadmin.org
, pwd : 로 로그인 할 수 admin
있습니다. Posgres 서버를 추가하려면 hostname postgres
, port를 사용하십시오 5432
.
version: '3'
services:
postgres:
image: postgres
hostname: postgres
ports:
- "6543:5432"
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: TEST_SM
volumes:
- postgres-data:/var/lib/postgresql/data
restart: unless-stopped
pgadmin:
image: dpage/pgadmin4
depends_on:
- postgres
ports:
- "5555:80"
environment:
PGADMIN_DEFAULT_EMAIL: pgadmin4@pgadmin.org
PGADMIN_DEFAULT_PASSWORD: admin
restart: unless-stopped
volumes:
postgres-data:
docker network ls
postgres-pgadmin 네트워크 (내는 postgres_postgres)에 대한 브리지가 표시됩니다. 그러면 docker network inspect postgres_postgres
각각 ip / 호스트 이름이있는 두 개의 컨테이너를 볼 수 있습니다 . Postgres (내는 postgres_db_1)에서 하나를 가져와 pgAdmin에서 성공적으로 연결합니다.
이것이 내가 한 일입니다
docker run -p 5432:5432 --name container-postgresdb -e POSTGRES_PASSWORD=admin -d postgres
docker run -p 5050:80 -e "PGADMIN_DEFAULT_EMAIL=name@example.com" -e "PGADMIN_DEFAULT_PASSWORD=admin" -d dpage/pgadmin4
host: host.docker.internal
database: postgres
user: postgres
password: admin
잘 작동합니다 !!!!!
Unable to connect to server: could not translate host name "host.docker.internal" to address: Try again
제 경우에는 명령을 통해 내 postgre 이미지를 검사하는 문제를 해결할 수 있습니다.
docker inspect CONTAINER_ID | grep IPAddress.
그래서 도커 IP 주소를 사용하여 pgadmin 4 연결을 구성했는데 모든 것이 정상이었습니다. @Afshin Ghazi 덕분에
pgAdmin이 동일한 Ubuntu 호스트 / 게스트에서 실행되도록 의도 된 경우 postgres 컨테이너를 연결해야하므로 이름으로 확인할 수 있습니다.
1. postgres 컨테이너를 실행합니다.
docker run --name some-postgres -e POSTGRES_PASSWORD=postgres -d postgres
2. pgAdmin 컨테이너를 실행합니다.
docker run -p 80:80 --link some-postgres -e "PGADMIN_DEFAULT_EMAIL=email@domain.com" -e "PGADMIN_DEFAULT_PASSWORD=postgres" -d dpage/pgadmin4
3. 이제 phAdmin 웹 앱에 새 서버를 추가 할 때 some-postgres
서버 이름으로 사용 합니다.
--link some-postgres
pgAdmin을 불러 왔을 때 주목하십시오 . 이 명령은 postgres 컨테이너를 pgAdmin 컨테이너에 표시합니다.
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.
또한 --link
pgadmin 컨테이너를 사용하여 postgres 컨테이너와 통신 할 수 있는 운이 없었습니다 . 그러나 pgadmin의 로컬 설치에서 postgres에 액세스 할 수 있습니다.
데이터베이스와 pgAdmin을 가져 오기 위해 이것을 docker yaml 파일에 포함했습니다.
database:
image: postgres:10.4-alpine
container_name: kafka-nodejs-example-database
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
expose:
- "5432"
ports:
- 8000:5432
volumes:
- ./services/database/schema.sql:/docker-entrypoint-initdb.d/1-schema.sql
- ./services/database/seed.sql:/docker-entrypoint-initdb.d/2-seed.sql
pgadmin:
image: dpage/pgadmin4
ports:
- 5454:5454/tcp
environment:
- PGADMIN_DEFAULT_EMAIL=admin@mydomain.com
- PGADMIN_DEFAULT_PASSWORD=postgres
- PGADMIN_LISTEN_PORT=5454
postgres 사용자 이름은 alphaone이고 암호는 xxxxxxxxxxx입니다.
DO가 docker ps
다음 컨테이너 ID를 얻을 수 있습니다docker inspect <dockerContainerId> | grep IPAddress
예 : docker inspect 2f50fabe8a87 | grep IPAddress
Ip 주소를 pgAdmin 및 docker에서 사용되는 데이터베이스 자격 증명에 삽입합니다.
localhost
이 작동하지 않았습니다.
제 경우에는 PostgreSQL 컨테이너가 있었기 때문에 컨테이너를 변경하지 않았거나 도커 작성 접근 방식을 만들지 않았습니다. PostgreSQL을 설치하려면 몇 달 후에 pgadming이 필요했기 때문에 이것이 제 접근 방식입니다.
docker inspect my_container_id_postgreSQL
PostgreSQL에 할당 된 네트워크는 다음과 같습니다.
"네트워크": { "docker_default": { "IPAddress": "172.18.0.2", ...}}
--network
명령으로 내 PGADMIN을 실행했습니다.
docker run -p 85:80 --network docker_default -e 'PGADMIN_DEFAULT_EMAIL=user@domain.com'-e 'PGADMIN_DEFAULT_PASSWORD = SuperSecret'-d dpage / pgadmin4
Ip 주소를 pgAdmin 및 docker에서 사용되는 데이터베이스 자격 증명에 삽입합니다.
누군가에게 유용 할 수 있기를 바랍니다. 문안 인사.
컨테이너의 IP를 주문하거나 찾으려면 다음 명령을 사용하십시오.
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
이틀 동안이 문제에 직면 한 후 그 문제를 해결할 수있었습니다.
이 문제의 해결책은 이미 do inspect
docker inspect CONTAINER_ID
하지만이 명령을 실행하는 동안 Host Config Config Network Settings 등과 같은 많은 로그를 얻었 으므로 0.0.0.0을 시도 하고 config, host, networkSettings 다른 -2 IPAddress를 시도했기 때문에 pgAdmin 연결 에 추가 할 IPAddress를 혼동 했습니다. 로그하지만 마지막으로 많이 시도한 후에 작동합니다.
어떤 IP로 작동하는지, 우리는 해당 네트워크 IP 주소를 추가해야합니다 ( postgres 와 pgAdmin 을 연결하기 위해 생성 한 ).
내 경우처럼 내가 실행할 때 :-
docker postgres_container 검사
"NetworkSettings": {
"Bridge": "",
"SandboxID": "sdffsffsfsfsfsf123232e2r3pru3ouoyoyuosyvo8769696796",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"5432/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "5432"
}
]
},
"SandboxKey": "/var/run/docker/231231Ad132",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {
"postgres": {
"IPAMConfig": null,
"Links": null,
"Aliases": [
"postgres",
"0e2j3bn2m42"
],
"NetworkID": "35rhlhl3l53l5hlh3523233k3k4k22l3hk2k4",
"EndpointID":"b3424n43k52o2i4n235k1k4l2l4hj234f14n2",
"Gateway": "192.168.16.1",
"IPAddress": "192.168.16.2",
"IPPrefixLen": 20,
"IPv6Gateway": "",
따라서 NetworkSettings-> Network-> Postgres (내가 만든 네트워크)-> IPAddress ie "IPAddress": "192.168.16.2"를 추가해야합니다.
이 IP를 추가하면 작동합니다.
도움이 되길 바랍니다.
이를 위해 Docker 브리지 네트워크를 만들 수도 있습니다.
$ 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 PGADMIN_DEFAULT_EMAIL=user@domain.com \
--env PGADMIN_DEFAULT_PASSWORD=pgadm123 \
dpage/pgadmin4:4.20
27f9ce1c1c4c383ee1507f4e2d88f6ef33d4fcf5b209a8a03b87519f90d56312
http : // localhost : 8000 /을 엽니 다 .
위에 사용 된 호스트 이름 / 주소는 다음에서 지정한 Postgres 컨테이너의 이름입니다. --name pg
컨테이너의 올바른 IP를 찾으려면 다음 명령을 실행하십시오.
컨테이너 ID 확인 :
docker ps
컨테이너의 올바른 IP를 확인하려면 :
docker inspect <ID_CONTAINER> | grep "IPAddress"
Docker를 사용한 PostgreSQL 및 PgAdmin의 구성은 간단합니다. 옳지 않은 경우 문제가 더 심하면 처음부터 구성을 다시 실행하는 것이 좋습니다.
다음은이 문제를 해결하기 위해 개발 한 스크립트입니다. script-sh / install-docker-postgres-and-pgadmin
macOS IP의 경우 postgres
및 제공 pgadmin4
하는 것과 다릅니다 docker inspect
. 유형
docker-machine ls
왼쪽에있는 서버 이름을 살펴보십시오. 그건 default
기본적으로.
docker-machine ip default
IP 것이다 당신을 위해 사용할 필요가 둘 , pgadmin4
브라우저 및 위해 postgres
에 pgadmin4
설정.
내가 시도하고 일한 해결책은 postgress와 pgadmin을 서비스로 포함하는 docker compose 파일을 만드는 것이 었습니다. 자세한 내용은 : docker에서 postgres에 pgadmin 연결