简体   繁体   中英

Can not connect to a postgres database in a docker container from my local machine

I have a strange problem with docker and postgres. I can not connect from my local machine to psql inside the docker container.

First of all I created my container with this command:
docker run -d -p 5432:5432 --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword postgres

After that I executed the container with following command:
docker exec -it my-postgres bash

Inside the container I started psql with the postgres user:
psql -U postgres
And I created a new database:
CREATE DATABASE mytestdb;

Everything works inside the container, but if I want to connect to it from my machine it does only show the database from my machine. I tried this to connect to postgres:
psql -h localhost -p 5432 -U postgres

Which should me show something like this:

                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 mytestdb  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
(4 rows)

But instead I get this:

                                          List of databases
      Name       |      Owner      | Encoding | Collate | Ctype   |        Access privileges          
-----------------+-----------------+----------+---------+---------+----------------------------------
 user            | user            | UTF8     | C       | C       | 
 postgres        | user            | UTF8     | C       | C       | 
 template0       | user            | UTF8     | C       | C       | =c/user                 +
                 |                 |          |         |         | user =CTc/user
 template1       | user            | UTF8     | C       | C       | =c/user                 +
                 |                 |          |         |         | user =CTc/user
(4 rows)

(END)

In every tutorial, I saw they did it, but for me, it doesn't work. So please help me.

The problem is when you creating the db. CREATE DATABASE mytestdb you forgot to add ; the command should be like CREATE DATABASE mytestdb;

And then you have your db and you can access it from inside the container or your host with these commands

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM