Skip to content

Tutorial 6 Postgresql - Name service error in "getaddrinfo" #10

@StellarSyzygy

Description

@StellarSyzygy

Thank you for the tutorials! I'm new to lisp and wanted to try a new web project in lisp, so these tutorials have been very helpful for me. Unfortunately I got stuck on Tutorial 6 with database connections using postgresql because I keep getting an error: "Database error: Name service error in "getaddrinfo": -2 (Name or service not known)". Whenever you get a chance, do you know what could cause this issue or how can I can debug? Gonna give some more information about my setup (apologies in advance if I give too much info).

For some background, I'm using docker to make development a bit easier. I have a test image which is just the latest fukamachi/sbcl docker image with the needed dependencies installed and loaded. Also I'm using the latest postgresql image. I have the following setup:

.env

APP_ENV=postgres
POSTGRES_DB_NAME=dbname
POSTGRES_USER=user
POSTGRES_PASSWORD=password
POSTGRES_ADDRESS=database
# POSTGRES_ADDRESS=172.18.0.2
POSTGRES_PORT=5432

docker-compose.yml

services:
  database:
    image: postgres
    environment:
      - PGUSER=${POSTGRES_USER}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=${POSTGRES_DB_NAME}
      - POSTGRES_PORT=${POSTGRES_PORT}
    # ports:
    #   - "127.0.0.1:5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -d ${POSTGRES_DB_NAME} -U ${POSTGRES_USER}"]
      interval: 10s
      timeout: 5s
      retries: 5
  develop:
    image: test-image-dev:v2026.05.10-3
    volumes:
      - .:/trunk
    ports:
      - "127.0.0.1:8000:8000"
    stdin_open: true
    tty: true
    environment:
      - APP_ENV=${APP_ENV}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB_NAME=${POSTGRES_DB_NAME}
      - POSTGRES_ADDRESS=${POSTGRES_ADDRESS}
      - POSTGRES_PORT=${POSTGRES_PORT}
    depends_on:
      database:
        condition: service_healthy

After running docker compose --env-file .env up -d develop, I verified that the postgre database was up running and didn't see any errors from the logs:

PostgreSQL init process complete; ready for start up.

2026-05-15 03:00:58.326 UTC [1] LOG:  starting PostgreSQL 18.3 (Debian 18.3-1.pgdg13+1) on x86_64-pc-linux-gnu, 
compiled by gcc (Debian 14.2.0-19) 14.2.0, 64-bit
2026-05-15 03:00:58.327 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2026-05-15 03:00:58.327 UTC [1] LOG:  listening on IPv6 address "::", port 5432
2026-05-15 03:00:58.334 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2026-05-15 03:00:58.345 UTC [75] LOG:  database system was shut down at 2026-05-15 03:00:58 UTC
2026-05-15 03:00:58.352 UTC [1] LOG:  database system is ready to accept connections

Then in my main dev container with lisp installed, I'm using the same code from tutorial 6 (with additional logging for all the environment variables + 0.0.0.0 as the server ip). I ran the following and get an error when actually making a request:

root@1d5db19caa3c:/trunk# qlot exec sbcl --load /trunk/tutorials/ningle-tutorial-project-tutorial-6-postgresql/ningle-tutorial-project.asd \
>                 --eval '(asdf:load-system :ningle-tutorial-project)' \
>                 --eval '(ningle-tutorial-project:start)'
...

POSTGRES_DB_NAME: dbname
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_ADDRESS: database
POSTGRES_PORT: 5432
NOTICE: Running in debug mode. Debugger will be invoked on errors.
  Specify ':debug nil' to turn it off on remote environments.
Woo server is started.
Listening on 0.0.0.0:8000.
*
;; When I actually navigate to localhost:8000, I get the below error:

* Backtrace for: #<SB-THREAD:THREAD tid=38 "clack-handler-woo" RUNNING {12051FBF13}>
0: ((LAMBDA NIL :IN UIOP/IMAGE:PRINT-BACKTRACE))
1: ((FLET "THUNK" :IN UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX))
2: (SB-IMPL::%WITH-STANDARD-IO-SYNTAX #<FUNCTION (FLET "THUNK" :IN UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX) {764EC19F53FB}>)  
3: (UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX #<FUNCTION (LAMBDA NIL :IN UIOP/IMAGE:PRINT-BACKTRACE) {1206FF1CEB}> :PACKAGE :CL)4: (UIOP/IMAGE:PRINT-CONDITION-BACKTRACE #<CL-POSTGRES:DATABASE-SOCKET-ERROR {1206FF1CD3}> :STREAM #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDERR* {1200040E63}> :COUNT NIL)
5: (LACK/MIDDLEWARE/BACKTRACE::PRINT-ERROR #<CL-POSTGRES:DATABASE-SOCKET-ERROR {1206FF1CD3}> (:RAW-BODY #<FLEXI-STREAMS::VECTOR-INPUT-STREAM {120533E8F3}> :REQUEST-METHOD :GET :SCRIPT-NAME "" :SERVER-NAME "localhost" :SERVER-PORT 8000 :SERVER-PROTOCOL :HTTP/1.1 ...) #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDERR* {1200040E63}>)
6: ((LAMBDA (CONDITION) :IN "/root/.cache/qlot/sources/git/github.com/fukamachi/lack/35d8b0ab38a5f3a8ce885f9b135152ce932a45e2/lack-ref-35d8b0ab38a5f3a8ce885f9b135152ce932a45e2/src/middleware/backtrace.lisp") #<CL-POSTGRES:DATABASE-SOCKET-ERROR {1206FF1CD3}>)
7: (SB-KERNEL::%SIGNAL #<CL-POSTGRES:DATABASE-SOCKET-ERROR {1206FF1CD3}>)
8: (ERROR #<CL-POSTGRES:DATABASE-SOCKET-ERROR {1206FF1CD3}>)
9: (SB-KERNEL:WITH-SIMPLE-CONDITION-RESTARTS ERROR NIL #<CL-POSTGRES:DATABASE-SOCKET-ERROR {1206FF1CD3}>)
10: ((FLET CL-POSTGRES::ADD-RESTART :IN CL-POSTGRES::INITIATE-CONNECTION) #<SB-BSD-SOCKETS:HOST-NOT-FOUND-ERROR {1206FD8113}>)
11: (CL-POSTGRES::INITIATE-CONNECTION #<CL-POSTGRES:DATABASE-CONNECTION {1206FAB5B3}> 0)
" 5432 :NO "postgres" "postmodern-default" NIL)
" :PORT 5432 :USE-SSL :NO :MICROSECOND-PRECISION NIL :SERVICE "postgres" :APPLICATION-NAME "postmodern-default" :USE-BINARY NIL) [fast-method]
" :PORT 5432)basewordED :POSTGRES :DATABASE-NAME "dbname
15: ((LAMBDA (MITO.MIDDLEWARE::ENV) :IN "/root/.cache/qlot/releases/qlot:/localhost/mito/mito/3d7049160a7d89858b54d98f99d3e1bf/mito-20260101-git/src/middleware.lisp") (:LACK.SESSION.OPTIONS (:ID "1b1469ab066cbce70102514cdb704159f92314eb" :NEW-SESSION T :CHANGE-ID NIL :EXPIRE NIL) :LACK.SESSION #<HASH-TABLE :TEST EQUAL :COUNT 0 {12054C25B3}> :RAW-BODY #<FLEXI-STREAMS::VECTOR-INPUT-STREAM {120533E8F3}> :REQUEST-METHOD :GET :SCRIPT-NAME "" :SERVER-NAME "localhost" ...))
16: ((LAMBDA (LACK/MIDDLEWARE/SESSION::ENV) :IN "/root/.cache/qlot/sources/git/github.com/fukamachi/lack/35d8b0ab38a5f3a8ce885f9b135152ce932a45e2/lack-ref-35d8b0ab38a5f3a8ce885f9b135152ce932a45e2/src/middleware/session.lisp") (:LACK.SESSION.OPTIONS (:ID "1b1469ab066cbce70102514cdb704159f92314eb" :NEW-SESSION T :CHANGE-ID NIL :EXPIRE NIL) :LACK.SESSION #<HASH-TABLE :TEST EQUAL :COUNT 0 {12054C25B3}> :RAW-BODY #<FLEXI-STREAMS::VECTOR-INPUT-STREAM {120533E8F3}> :REQUEST-METHOD :GET :SCRIPT-NAME "" :SERVER-NAME "localhost" ...))
17: ((LAMBDA (LACK/MIDDLEWARE/BACKTRACE::ENV) :IN "/root/.cache/qlot/sources/git/github.com/fukamachi/lack/35d8b0ab38a5f3a8ce885f9b135152ce932a45e2/lack-ref-35d8b0ab38a5f3a8ce885f9b135152ce932a45e2/src/middleware/backtrace.lisp") (:RAW-BODY #<FLEXI-STREAMS::VECTOR-INPUT-STREAM {120533E8F3}> :REQUEST-METHOD :GET :SCRIPT-NAME "" :SERVER-NAME "localhost" :SERVER-PORT 8000 :SERVER-PROTOCOL :HTTP/1.1 ...))
18: ((LAMBDA NIL :IN WOO::SETUP-PARSER))
19: ((LAMBDA (FAST-HTTP.HTTP:HTTP) :IN FAST-HTTP:MAKE-PARSER) #<unused argument>)
20: (FAST-HTTP.PARSER::PARSE-BODY #S(FAST-HTTP.HTTP:HTTP-REQUEST :METHOD :GET :MAJOR-VERSION 1 :MINOR-VERSION 1 :STATUS 0 :CONTENT-LENGTH NIL :CHUNKED-P NIL :UPGRADE-P NIL :HEADERS #<HASH-TABLE :TEST EQUAL :COUNT 14 {1205210983}> :HEADER-READ 0 :MARK 468 :STATE 3 :RESOURCE "/") #<unavailable argument> #<unavailable argument> 468 #<unavailable argument> #<unavailable 
argument>)
21: (FAST-HTTP.PARSER:PARSE-REQUEST #S(FAST-HTTP.HTTP:HTTP-REQUEST :METHOD :GET :MAJOR-VERSION 1 :MINOR-VERSION 1 :STATUS 0 :CONTENT-LENGTH NIL :CHUNKED-P NIL :UPGRADE-P NIL :HEADERS #<HASH-TABLE :TEST EQUAL :COUNT 14 {1205210983}> :HEADER-READ 0 :MARK 468 :STATE 3 :RESOURCE "/") #S(FAST-HTTP.PARSER:CALLBACKS :MESSAGE-BEGIN #<FUNCTION #1=(LAMBDA (FAST-HTTP.HTTP:HTTP) . #2=(:IN FAST-HTTP:MAKE-PARSER)) {120521079B}> :URL #<FUNCTION #3=(LAMBDA (FAST-HTTP.HTTP:HTTP FAST-HTTP::DATA FAST-HTTP::START FAST-HTTP::END) . #2#) {B80140FC9B}> :FIRST-LINE NIL :STATUS #<FUNCTION #3# {B80140FADB}> :HEADER-FIELD #<FUNCTION #3# {12080B191B}> :HEADER-VALUE #<FUNCTION #3# {12080B194B}> :HEADERS-COMPLETE #<FUNCTION #1# {12080B196B}> :BODY #<FUNCTION #3# {12080B19AB}> :MESSAGE-COMPLETE #<FUNCTION #1# {12080B19CB}>) #(71 69 84 32 47 32 72 84 84 80 47 49 ...) :START #<unavailable argument> :END #<unavailable argument> :HEAD-REQUEST #<unused argument>)
22: ((LAMBDA (FAST-HTTP::DATA &KEY :START :END) :IN FAST-HTTP:MAKE-PARSER) #(71 69 84 32 47 32 72 84 84 80 47 49 ...) :START #<unavailable argument> :END #<unavailable argument>)
23: (WOO::READ-CB #S(WOO.EV.SOCKET:SOCKET :WATCHERS #(#.(SB-SYS:INT-SAP #X764EBC0118F0) #.(SB-SYS:INT-SAP #X764EBC011930) #.(SB-SYS:INT-SAP #X764EBC011970)) :LAST-ACTIVITY 1.7788617904377947d9 :FD 9 :REMOTE-ADDR "172.18.0.1" :REMOTE-PORT 1234 :DATA #<FUNCTION (LAMBDA (FAST-HTTP::DATA &KEY :START :END) :IN FAST-HTTP:MAKE-PARSER) {12080B186B}> :TCP-READ-CB WOO.EV.TCP::TCP-READ-CB :READ-CB #<FUNCTION WOO::READ-CB> :WRITE-CB NIL :SSL-HANDLE NIL :OPEN-P T :BUFFER #S(FAST-IO:OUTPUT-BUFFER :VECTOR #(0 0 0 0 0 0 0 0 0 0 0 0 ...) :FILL 0 :LEN 0 :QUEUE NIL :LAST NIL :OUTPUT NIL) ...) #(71 69 84 32 47 32 72 84 84 80 47 49 ...) :START 0 :END 468)
24: ((LAMBDA (SB-ALIEN::ARGS-POINTER SB-ALIEN::RESULT-POINTER) :IN "/root/.cache/qlot/sources/git/github.com/fukamachi/woo/2ef0d221827becc123b46139d3965d848b04b7ef/woo-ref-2ef0d221827becc123b46139d3965d848b04b7ef/src/ev/tcp.lisp") #<unavailable argument> #<unused argument>)
25: ("foreign function: funcall_alien_callback")
26: ("foreign function: #x520000000EFB")
27: ("foreign function: #x764EC1C55334")
28: ("foreign function: ev_run")
29: (LEV:EV-RUN #.(SB-SYS:INT-SAP #X764EBC000E10) 0)
30: (WOO:RUN #<FUNCTION (LAMBDA (LACK/MIDDLEWARE/BACKTRACE::ENV) :IN "/root/.cache/qlot/sources/git/github.com/fukamachi/lack/35d8b0ab38a5f3a8ce885f9b135152ce932a45e2/lack-ref-35d8b0ab38a5f3a8ce885f9b135152ce932a45e2/src/middleware/backtrace.lisp") {1204A2493B}> :DEBUG T :PORT 8000 :ADDRESS "0.0.0.0" :LISTEN NIL :BACKLOG NIL :FD NIL :WORKER-NUM NIL :SSL-KEY-FILE NIL 
:SSL-CERT-FILE NIL :SSL-KEY-PASSWORD NIL)
31: ((FLET BT2::RUN-FUNCTION :IN BT2::ESTABLISH-DYNAMIC-ENV))
32: ((LABELS BT2::%ESTABLISH-DYNAMIC-ENV-WRAPPER :IN BT2::ESTABLISH-DYNAMIC-ENV))
33: ((FLET SB-UNIX::BODY :IN SB-THREAD::RUN))
34: ((FLET "WITHOUT-INTERRUPTS-BODY-" :IN SB-THREAD::RUN))
35: ((FLET SB-UNIX::BODY :IN SB-THREAD::RUN))
36: ((FLET "WITHOUT-INTERRUPTS-BODY-" :IN SB-THREAD::RUN))
37: (SB-THREAD::RUN)
38: ("foreign function: call_into_lisp_")
39: ("foreign function: funcall1")
Above backtrace due to this condition:
Database error: Name service error in "getaddrinfo": -2 (Name or service not known)

Request:
    RAW-BODY:

debugger invoked on a FAST-HTTP.ERROR:CB-MESSAGE-COMPLETE in thread #<THREAD tid=38 "clack-handler-woo" RUNNING {12051FBF13}>: Callback Error: the message-complete callback failed
  #<FLEXI-STREAMS::VECTOR-INPUT-STREAM {120533E8F3}> cannot be printed readably.

The current thread is not at the foreground,
SB-THREAD:RELEASE-FOREGROUND has to be called in #<SB-THREAD:THREAD tid=28 "main thread" RUNNING {1200038003}>
for this thread to enter the debugger.

I initially thought I had some network issue, but verified the following:

  • can ping the database container from inside the develop container
  • when checking inside the develop container (via nslookup + ping), the database container's hostname=database resolves to ip=172.18.0.2
  • using POSTGRES_ADDRESS=172.18.0.2 instead of POSTGRES_ADDRESS=database still shows the same backtrace, but I do the see updated environment variable from the lisp start function
  • I can manually connect to the db from the lisp repl:
(mito:connect-toplevel :postgres :database-name "dbname" :username "user" :password "password" :host "database" :port 5432)
#<DBD.POSTGRES:DBD-POSTGRES-CONNECTION {1207AC79A3}>
  • If I don't start the database service, then manually connecting the to the db from the lisp repl fails as expected
(mito:connect-toplevel :postgres :database-name "dbname" :username "user" :password "password" :host "database" :port 5432)
debugger invoked on a CL-POSTGRES:DATABASE-SOCKET-ERROR in thread
#<THREAD tid=17 "main thread" RUNNING {1200038003}>:
  Database error: Name service error in "getaddrinfo": -3 (Temporary failure in name resolution)

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [RECONNECT] Try again.
  1: [ABORT    ] Exit debugger, returning to top level.

((FLET CL-POSTGRES::ADD-RESTART :IN CL-POSTGRES::INITIATE-CONNECTION) #<SB-BSD-SOCKETS:TRY-AGAIN-ERROR {12070801F3}>)
   source: (ERROR (WRAP-SOCKET-ERROR ERR))
0]

I've been stuck on this for a few days and don't think I'll be able to get past this issue without some help. I'm not too familiar with lisp, so might be overlooking something basic in my setup. Do you know why I keep getting the above issue Database error: Name service error in "getaddrinfo": -2 (even when using an ip address)? Or do you have any recommendations on debugging steps? Thank you.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions