gliderlabs / docker-alpine

Alpine Linux Docker image. Win at minimalism!
http://gliderlabs.viewdocs.io/docker-alpine
BSD 2-Clause "Simplified" License
5.71k stars 529 forks source link

Nslookup doesn't work in github actions #574

Open taoberquer opened 11 months ago

taoberquer commented 11 months ago

Hi, I'm trying to access a database from a container with nslookup and I'm getting an error. I've made an example of my github actions to reproduce the error. If I've forgotten anything, please let me know.

The error :

Run nslookup postgres

Server:     127.0.0.11
Address:    127.0.0.11:53

** server can't find postgres.psu1waqqpzqu3mj[4](https://github.com/sedeotech/inferni/actions/runs/6588514445/job/17900939871#step:3:4)5gsqnyggvb.xx.internal.cloudapp.net: NXDOMAIN

** server can't find postgres.psu1waqqpzqu3mj[4](https://github.com/sedeotech/inferni/actions/runs/6588514445/job/17900939871#step:3:5)[5](https://github.com/sedeotech/inferni/actions/runs/6588514445/job/17900939871#step:3:6)gsqnyggvb.xx.internal.cloudapp.net: NXDOMAIN

The example :

name: Test

on:
  push:
    branches: ["*"]

jobs:
  test:
    services:
      postgres:
        image: postgis/postgis:15-3.4-alpine
        env:
          POSTGRES_PASSWORD: changeme
          POSTGRES_DB: database
        ports:
          - 5432:5432
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

    runs-on: ubuntu-latest
    container: alpine:latest
    steps:
        - run: nslookup postgres
hongli-gao commented 10 months ago

We also meet similar issues, we can’t use a hostname to connect to MongoDB. It reports a ‘server selection timeout’, but our code is okay if we change the hostname to an IP address. We found that the ‘libc6-compat-1.2.3-r5.apk’ is okay, but the ‘libc6-compat-1.2.4-r2.apk’ failed. so we rollback to alpine:3.17.2 to use ‘libc6-compat-1.2.3-r5.apk’

inter169 commented 9 months ago

Hi, I'm trying to access a database from a container with nslookup and I'm getting an error. I've made an example of my github actions to reproduce the error. If I've forgotten anything, please let me know.

The error :

Run nslookup postgres

Server:       127.0.0.11
Address:  127.0.0.11:53

** server can't find postgres.psu1waqqpzqu3mj[4](https://github.com/sedeotech/inferni/actions/runs/6588514445/job/17900939871#step:3:4)5gsqnyggvb.xx.internal.cloudapp.net: NXDOMAIN

** server can't find postgres.psu1waqqpzqu3mj[4](https://github.com/sedeotech/inferni/actions/runs/6588514445/job/17900939871#step:3:5)[5](https://github.com/sedeotech/inferni/actions/runs/6588514445/job/17900939871#step:3:6)gsqnyggvb.xx.internal.cloudapp.net: NXDOMAIN

The example :

name: Test

on:
  push:
    branches: ["*"]

jobs:
  test:
    services:
      postgres:
        image: postgis/postgis:15-3.4-alpine
        env:
          POSTGRES_PASSWORD: changeme
          POSTGRES_DB: database
        ports:
          - 5432:5432
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

    runs-on: ubuntu-latest
    container: alpine:latest
    steps:
        - run: nslookup postgres

the verison of binary nslookup considered the parameter hostname postgres to not be in FQDN format, Therefore, it selected the domain name from the default search domain (the "search" directive in /etc/resolv.conf), completed the hostname to FQDN format, then performed the DNS query, finally raised the DNS querry error.

you could use the hostname with the dot suffixed ("postgres."), and nslookup does NOT complet the FQDN by using default search domain.

linuswillner commented 1 day ago

Hi, I'm just here to report that I just spent 2 days on debugging this issue in GitHub Actions before ending up here. 🫠 The fix as described by @inter169 worked on the first try: Doing nslookup containername resolves to the random cloudapp domain thing, while suffixing with a dot (nslookup containername.) resolves internally in Docker as expected.