hackoregon / transportation-system-backend

2018 repo for the transportation api backend
MIT License
8 stars 2 forks source link

Znmeb merge new database #32

Closed znmeb closed 6 years ago

znmeb commented 6 years ago

This is ready to go - everything works on my workstation:

  1. The containers see the environment variables (issue #28, #30)
  2. The API container waits for PostgreSQL to come up (issue #29) and runs the migrations it's supposed to run (issue #31).
  3. I can browse to localhost:8000/api, /schema and /admin and they all show up and look normal!
znmeb commented 6 years ago

It's not installing Jessie twice - it needs to install gnupg first to add the pgdg repo, so there are two apt-get install invocations.

znmeb commented 6 years ago

And yes, when we deploy we will remove everything not called / used ;-)

BrianHGrant commented 6 years ago

ok, makes sense 👍

BrianHGrant commented 6 years ago

@kiniadit if you can review as well.

kiniadit commented 6 years ago

reviewing right now.

kiniadit commented 6 years ago

I'm getting the following error after running start.sh (after running build.sh) -

➜ transportation-system-backend git:(znmeb-merge-new-database) ./bin/start.sh -l Starting transportationsystembackend_db_1 ... done Starting transportationsystembackend_api_1 ... done Attaching to transportationsystembackend_db_1, transportationsystembackend_api_1 db_1 | 2018-02-16 23:27:41.249 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432 db_1 | 2018-02-16 23:27:41.249 UTC [1] LOG: listening on IPv6 address "::", port 5432 db_1 | 2018-02-16 23:27:41.257 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" db_1 | 2018-02-16 23:27:41.280 UTC [20] LOG: database system was shut down at 2018-02-16 23:27:35 UTC db_1 | 2018-02-16 23:27:41.295 UTC [1] LOG: database system is ready to accept connections api_1 | psql: could not connect to server: No such file or directory api_1 | Is the server running locally and accepting api_1 | connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? api_1 | Postgres is unavailable - sleeping api_1 | psql: could not connect to server: No such file or directory api_1 | Is the server running locally and accepting api_1 | connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? api_1 | Postgres is unavailable - sleeping

I checked the previous PR branch and it ran fine. Is this something to do with the docker-compose.yml file?

znmeb commented 6 years ago

@kiniadit I need to document this! The startup sequence is

In the db container, it initializes the database, then restores the backup files, then restarts. You will see errors in that log file, which you can ignore.

In the api container, it tries every 15 seconds to connect to db. You will see errors each time it fails, which you can ignore. When it finally succeeds - it's succeeded on the third attempt in my tests on my fast workstation - it will run the migrations and start the server.

One other note - at some point bin/start.sh needs to do the docker-compose up with the detached option (-d). Then the logs can be fetched from each container with docker logs <container_name> rather than seeing them mixed together on a console. But that should wait till we get all the Travis and continuous deployment stuff nailed down.

kiniadit commented 6 years ago

@znmeb i did wait, for a quite a while. on my system its now been 5 minutes and i still have the recurring Postgres is unavailable - sleeping error pop up. the db appears to be up and running on port 5432. so not sure what it is waiting for.

also, what is docker-entrypoint.sh for the db image? I don't see it in my file

➜ transportation-system-backend git:(znmeb-merge-new-database) docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 94ae6161726a api "/code/bin/local-doc…" 16 minutes ago Up 13 minutes 0.0.0.0:8000->8000/tcp transportationsystembackend_api_1 4679c0a369be db "docker-entrypoint.s…" 30 minutes ago Up 13 minutes 0.0.0.0:5439->5432/tcp transportationsystembackend_db_1

is there something in DOCKERFILE.postgis that's causing this?

kiniadit commented 6 years ago

*I don't see it in my file structure

znmeb commented 6 years ago

Crashes on Windows 10 Pro / Docker for Windows:

$ docker logs -f  transportationsystembackend_api_1
standard_init_linux.go:195: exec user process caused "no such file or directory"

Most likely this is another file that needs to have Unix line endings inside the container that Git decided I needed to see with Windows line endings.

znmeb commented 6 years ago

It crashes - we need the wait for the database to be listening:

$ docker logs transportationsystembackend_api_1
Collect static files
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/js/csrf.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/js/jquery-1.12.4.min.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/js/ajax-form.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/js/default.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/js/coreapi-0.1.1.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/js/bootstrap.min.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/js/prettify-min.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.ttf'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.svg'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.eot'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.woff2'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/fonts/glyphicons-halflings-regular.woff'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/img/glyphicons-halflings-white.png'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/img/glyphicons-halflings.png'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/img/grid.png'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/css/prettify.css'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/css/bootstrap-tweaks.css'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/css/bootstrap.min.css'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/css/default.css'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/js/api.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/js/jquery.json-view.min.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/js/jquery-1.10.2.min.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/js/highlight.pack.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/js/bootstrap.min.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/fonts/fontawesome-webfont.ttf'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/fonts/glyphicons-halflings-regular.ttf'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/fonts/glyphicons-halflings-regular.svg'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/fonts/fontawesome-webfont.woff'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/fonts/glyphicons-halflings-regular.eot'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/fonts/glyphicons-halflings-regular.woff2'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/fonts/glyphicons-halflings-regular.woff'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/fonts/fontawesome-webfont.eot'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/fonts/fontawesome-webfont.svg'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/img/favicon.ico'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/img/grid.png'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/css/font-awesome-4.0.3.css'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/css/highlight.css'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/css/bootstrap.min.css'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/css/base.css'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/css/bootstrap-theme.min.css'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework/static/rest_framework/docs/css/jquery.json-view.min.css'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/o2c.html'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/init.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/swagger-ui.min.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/swagger-ui.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lib/jquery.ba-bbq.min.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lib/jsoneditor.min.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lib/marked.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lib/swagger-oauth.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lib/js-yaml.min.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lib/backbone-min.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lib/jquery.wiggle.min.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lib/lodash.min.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lib/jquery-1.8.0.min.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lib/object-assign-pollyfill.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lib/highlight.9.1.0.pack_extended.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lib/highlight.9.1.0.pack.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lib/handlebars-2.0.0.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lib/jquery.slideto.min.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lang/en.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lang/es.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lang/translator.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lang/pt.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lang/it.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lang/zh-cn.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lang/ko-kr.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lang/tr.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lang/pl.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lang/ja.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lang/fr.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lang/geo.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/lang/ru.js'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/fonts/DroidSans.ttf'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/fonts/DroidSans-Bold.ttf'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/images/explorer_icons.png'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/images/logo_small.png'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/images/favicon-16x16.png'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/images/pet_store_api.png'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/images/throbber.gif'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/images/favicon.ico'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/images/favicon-32x32.png'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/images/collapse.gif'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/images/expand.gif'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/images/wordnik_api.png'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/css/typography.css'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/css/reset.css'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/css/screen.css'
Copying '/usr/local/lib/python3.6/site-packages/rest_framework_swagger/static/rest_framework_swagger/css/print.css'

88 static files copied to '/code', 118 unmodified.
Make migrations
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
    self.connect()
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 168, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/usr/local/lib/python3.6/site-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not connect to server: Connection refused
        Is the server running on host "db" (172.18.0.2) and accepting
        TCP/IP connections on port 5432?

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "./manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 365, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 335, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/makemigrations.py", line 92, in handle
    loader.check_consistent_history(connection)
  File "/usr/local/lib/python3.6/site-packages/django/db/migrations/loader.py", line 275, in check_consistent_history
    applied = recorder.applied_migrations()
  File "/usr/local/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 61, in applied_migrations
    if self.has_table():
  File "/usr/local/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 44, in has_table
    return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 255, in cursor
    return self._cursor()
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 232, in _cursor
    self.ensure_connection()
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
    self.connect()
  File "/usr/local/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
    self.connect()
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 168, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/usr/local/lib/python3.6/site-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not connect to server: Connection refused
        Is the server running on host "db" (172.18.0.2) and accepting
        TCP/IP connections on port 5432?

Migrate
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
    self.connect()
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 168, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/usr/local/lib/python3.6/site-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not connect to server: Connection refused
        Is the server running on host "db" (172.18.0.2) and accepting
        TCP/IP connections on port 5432?

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "./manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 365, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 335, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 79, in handle
    executor = MigrationExecutor(connection, self.migration_progress_callback)
  File "/usr/local/lib/python3.6/site-packages/django/db/migrations/executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
  File "/usr/local/lib/python3.6/site-packages/django/db/migrations/loader.py", line 49, in __init__
    self.build_graph()
  File "/usr/local/lib/python3.6/site-packages/django/db/migrations/loader.py", line 206, in build_graph
    self.applied_migrations = recorder.applied_migrations()
  File "/usr/local/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 61, in applied_migrations
    if self.has_table():
  File "/usr/local/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 44, in has_table
    return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 255, in cursor
    return self._cursor()
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 232, in _cursor
    self.ensure_connection()
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
    self.connect()
  File "/usr/local/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
    self.connect()
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 168, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/usr/local/lib/python3.6/site-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not connect to server: Connection refused
        Is the server running on host "db" (172.18.0.2) and accepting
        TCP/IP connections on port 5432?

Run server...
Performing system checks...

System check identified no issues (0 silenced).
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x7f6b90861510>
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
    self.connect()
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 168, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/usr/local/lib/python3.6/site-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not connect to server: Connection refused
        Is the server running on host "db" (172.18.0.2) and accepting
        TCP/IP connections on port 5432?

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/utils/autoreload.py", line 225, in wrapper
    fn(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 124, in inner_run
    self.check_migrations()
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 427, in check_migrations
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
  File "/usr/local/lib/python3.6/site-packages/django/db/migrations/executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
  File "/usr/local/lib/python3.6/site-packages/django/db/migrations/loader.py", line 49, in __init__
    self.build_graph()
  File "/usr/local/lib/python3.6/site-packages/django/db/migrations/loader.py", line 206, in build_graph
    self.applied_migrations = recorder.applied_migrations()
  File "/usr/local/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 61, in applied_migrations
    if self.has_table():
  File "/usr/local/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 44, in has_table
    return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 255, in cursor
    return self._cursor()
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 232, in _cursor
    self.ensure_connection()
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
    self.connect()
  File "/usr/local/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
    self.connect()
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 168, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/usr/local/lib/python3.6/site-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not connect to server: Connection refused
        Is the server running on host "db" (172.18.0.2) and accepting
        TCP/IP connections on port 5432?