could not translate host name "postgres" to address: Name does not resolve [Docker swarm]

4,667 views
Skip to first unread message

twinmegami

unread,
Feb 23, 2018, 10:05:05 PM2/23/18
to Django users
I am using docker swarm to set env

```
- DATABASE_URL=postgres://basin:basin_pa44@postgres:5432/demo
```


I confirmed two host can reach each other. And directly using psycopg2 was fine:

```
>>> import psycopg2                                                                                  
>>> conn = psycopg2.connect('postgres://basin:basin_pa44@postgres:5432/demo')                        
>>> conn                                                                                             
<connection object at 0x7f8c71179b48; dsn: 'user=basin host=postgres password=xxx port=5432 dbname=d$
mo', closed: 0>                                                                                      
>>> conn                                                                                             
KeyboardInterrupt                                                                                    
>>> cur = conn.cursor()                                                                              
>>>                                                                                                  
>>> cur.execute("""SELECT datname from pg_database""")                                               
>>> rows = cur.fetchall()                                                                            
>>> print "\nShow me the databases:\n"                                                               
                                                                                                     
Show me the databases:                                                                               
                                                                                                     
>>> for row in rows:                                                                                 
...     print "   ", row[0]                                                                          
...                                                                                                  
    postgres                                                                                         
    demo                                                                                             
    template1                                                                                        
    template0                                                                                        
```


django database settings : 
```
DATABASES = {
    'default': env.db(),
}
```

env:
```
>>> import environ                                                                                   
>>> env = environ.Env()                                                                              
>>> env                                                                                              
<environ.environ.Env object at 0x7f8c6cf949d0>                                                       
>>> env.db()                                                                                         
{'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'demo', 'HOST': 'postgres', 'USER': 'bas
in', 'PASSWORD': 'basin_pa44', 'PORT': 5432}                                                         
```

error:

```
I am using docker swarm to set env
```
- DATABASE_URL=postgres://basin:basin_pa44@postgres:5432/demo
```

I confirmed two host can reach each other. And directly using psycopg2 was fine:
```
>>> import psycopg2                                                                                  
>>> conn = psycopg2.connect('postgres://basin:basin_pa44@postgres:5432/demo')                        
>>> conn                                                                                             
<connection object at 0x7f8c71179b48; dsn: 'user=basin host=postgres password=xxx port=5432 dbname=d$
mo', closed: 0>                                                                                      
>>> conn                                                                                             
KeyboardInterrupt                                                                                    
>>> cur = conn.cursor()                                                                              
>>>                                                                                                  
>>> cur.execute("""SELECT datname from pg_database""")                                               
>>> rows = cur.fetchall()                                                                            
>>> print "\nShow me the databases:\n"                                                               
                                                                                                     
Show me the databases:                                                                               
                                                                                                     
>>> for row in rows:                                                                                 
...     print "   ", row[0]                                                                          
...                                                                                                  
    postgres                                                                                         
    demo                                                                                             
    template1                                                                                        
    template0                                                                                        
```

Database settings : 
```
DATABASES = {
    'default': env.db(),
}
```

env:
```
>>> import environ                                                                                   
>>> env = environ.Env()                                                                              
>>> env                                                                                              
<environ.environ.Env object at 0x7f8c6cf949d0>                                                       
>>> env.db()                                                                                         
{'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'demo', 'HOST': 'postgres', 'USER': 'bas
in', 'PASSWORD': 'basin_pa44', 'PORT': 5432}                                                         
```

error:

```
I am using docker swarm to set env
```
- DATABASE_URL=postgres://basin:basin_pa44@postgres:5432/demo
```

I confirmed two host can reach each other. And directly using psycopg2 was fine:
```
>>> import psycopg2                                                                                  
>>> conn = psycopg2.connect('postgres://basin:basin_pa44@postgres:5432/demo')                        
>>> conn                                                                                             
<connection object at 0x7f8c71179b48; dsn: 'user=basin host=postgres password=xxx port=5432 dbname=d$
mo', closed: 0>                                                                                      
>>> conn                                                                                             
KeyboardInterrupt                                                                                    
>>> cur = conn.cursor()                                                                              
>>>                                                                                                  
>>> cur.execute("""SELECT datname from pg_database""")                                               
>>> rows = cur.fetchall()                                                                            
>>> print "\nShow me the databases:\n"                                                               
                                                                                                     
Show me the databases:                                                                               
                                                                                                     
>>> for row in rows:                                                                                 
...     print "   ", row[0]                                                                          
...                                                                                                  
    postgres                                                                                         
    demo                                                                                             
    template1                                                                                        
    template0                                                                                        
```

Database settings : 
```
DATABASES = {
    'default': env.db(),
}
```

env:
```
>>> import environ                                                                                   
>>> env = environ.Env()                                                                              
>>> env                                                                                              
<environ.environ.Env object at 0x7f8c6cf949d0>                                                       
>>> env.db()                                                                                         
{'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'demo', 'HOST': 'postgres', 'USER': 'bas
in', 'PASSWORD': 'basin_pa44', 'PORT': 5432}                                                         
```

error:

```
I am using docker swarm to set env
```
- DATABASE_URL=postgres://basin:basin_pa44@postgres:5432/demo
```

I confirmed two host can reach each other. And directly using psycopg2 was fine:
```
>>> import psycopg2                                                                                  
>>> conn = psycopg2.connect('postgres://basin:basin_pa44@postgres:5432/demo')                        
>>> conn                                                                                             
<connection object at 0x7f8c71179b48; dsn: 'user=basin host=postgres password=xxx port=5432 dbname=d$
mo', closed: 0>                                                                                      
>>> conn                                                                                             
KeyboardInterrupt                                                                                    
>>> cur = conn.cursor()                                                                              
>>>                                                                                                  
>>> cur.execute("""SELECT datname from pg_database""")                                               
>>> rows = cur.fetchall()                                                                            
>>> print "\nShow me the databases:\n"                                                               
                                                                                                     
Show me the databases:                                                                               
                                                                                                     
>>> for row in rows:                                                                                 
...     print "   ", row[0]                                                                          
...                                                                                                  
    postgres                                                                                         
    demo                                                                                             
    template1                                                                                        
    template0                                                                                        
```

Database settings : 
```
DATABASES = {
    'default': env.db(),
}
```

env:
```
>>> import environ                                                                                   
>>> env = environ.Env()                                                                              
>>> env                                                                                              
<environ.environ.Env object at 0x7f8c6cf949d0>                                                       
>>> env.db()                                                                                         
{'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'demo', 'HOST': 'postgres', 'USER': 'bas
in', 'PASSWORD': 'basin_pa44', 'PORT': 5432}                                                         
```

error:

```
bidspy_demo.1...@nd4.csp.ali    | You have 22 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, 
uth, authtools, contenttypes, easy_thumbnails, orders, profiles, sessions.
bidspy_demo.1...@nd2.csp.ali    |   File "/usr/lib/python2.7/site-packages/django/utils/autoreload.py", line 227, in wrapper
bidspy_demo.1...@nd4.csp.ali    | Run 'python manage.py migrate' to apply them.
bidspy_demo.1...@nd4.csp.ali    | February 24, 2018 - 01:42:11
bidspy_demo.1...@nd4.csp.ali    | Django version 1.11.3, using settings 'demo.settings.development'
bidspy_demo.1...@nd2.csp.ali    |     fn(*args, **kwargs)
bidspy_demo.1...@nd4.csp.ali    | Starting development server at http://0.0.0.0:8000/
bidspy_demo.1...@nd4.csp.ali    | Quit the server with CONTROL-C.
bidspy_demo.1...@nd2.csp.ali    |   File "/usr/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 128, in inner_run
bidspy_demo.1...@nd2.csp.ali    |     self.check_migrations()
bidspy_demo.1...@nd2.csp.ali    |   File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 422, in check_migrations
bidspy_demo.1...@nd2.csp.ali    |     executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
bidspy_demo.1...@nd2.csp.ali    |   File "/usr/lib/python2.7/site-packages/django/db/migrations/executor.py", line 20, in __init__
bidspy_demo.1...@nd2.csp.ali    |     self.loader = MigrationLoader(self.connection)
bidspy_demo.1...@nd2.csp.ali    |   File "/usr/lib/python2.7/site-packages/django/db/migrations/loader.py", line 52, in __init__
bidspy_demo.1...@nd2.csp.ali    |     self.build_graph()
bidspy_demo.1...@nd2.csp.ali    |   File "/usr/lib/python2.7/site-packages/django/db/migrations/loader.py", line 209, in build_graph
bidspy_demo.1...@nd2.csp.ali    |     self.applied_migrations = recorder.applied_migrations()
bidspy_demo.1...@nd2.csp.ali    |   File "/usr/lib/python2.7/site-packages/django/db/migrations/recorder.py", line 65, in applied_migrations
bidspy_demo.1...@nd2.csp.ali    |     self.ensure_schema()
bidspy_demo.1...@nd2.csp.ali    |   File "/usr/lib/python2.7/site-packages/django/db/migrations/recorder.py", line 52, in ensure_schema
bidspy_demo.1...@nd2.csp.ali    |     if self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor()):
bidspy_demo.1...@nd2.csp.ali    |   File "/usr/lib/python2.7/site-packages/django/db/backends/base/base.py", line 254, in cursor
bidspy_demo.1...@nd2.csp.ali    |     return self._cursor()
bidspy_demo.1...@nd2.csp.ali    |   File "/usr/lib/python2.7/site-packages/django/db/backends/base/base.py", line 229, in _cursor
bidspy_demo.1...@nd2.csp.ali    |     self.ensure_connection()
bidspy_demo.1...@nd2.csp.ali    |   File "/usr/lib/python2.7/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection
bidspy_demo.1...@nd2.csp.ali    |     self.connect()
bidspy_demo.1...@nd2.csp.ali    |   File "/usr/lib/python2.7/site-packages/django/db/utils.py", line 94, in __exit__
bidspy_demo.1...@nd2.csp.ali    |     six.reraise(dj_exc_type, dj_exc_value, traceback)
bidspy_demo.1...@nd2.csp.ali    |   File "/usr/lib/python2.7/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection
bidspy_demo.1...@nd2.csp.ali    |     self.connect()
bidspy_demo.1...@nd2.csp.ali    |   File "/usr/lib/python2.7/site-packages/django/db/backends/base/base.py", line 189, in connect
bidspy_demo.1...@nd2.csp.ali    |     self.connection = self.get_new_connection(conn_params)
bidspy_demo.1...@nd2.csp.ali    |   File "/usr/lib/python2.7/site-packages/django/db/backends/postgresql/base.py", line 176, in get_new_connection
bidspy_demo.1...@nd2.csp.ali    |     connection = Database.connect(**conn_params)
bidspy_demo.1...@nd2.csp.ali    |   File "/usr/lib/python2.7/site-packages/psycopg2/__init__.py", line 130, in connect
bidspy_demo.1...@nd2.csp.ali    |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
bidspy_demo.1...@nd2.csp.ali    | django.db.utils.OperationalError: could not translate host name "postgres" to address: Name does not resolve
bidspy_demo.1...@nd2.csp.ali    |
```

twinmegami

unread,
Feb 24, 2018, 2:03:54 AM2/24/18
to Django users
Ok, I found the problem is depends_on not work on swarm mode
Reply all
Reply to author
Forward
0 new messages