ugrás a tartalomhoz

dockerben futó DNS build - hogyan?

mind1 valami név · 2020. Okt. 15. (Cs), 10.15
A dnsmasq is konténerben futna.
A Dokcerfile valahogy így indult:

FROM alpine:latest
RUN apk update ; apk upgrade ; apk install dnsmasq
...


Ott a gond, hogy ez a konténer lenne "a" dns.
(a systemd és egy egyéb nyalánkságok miatt a másodlagos dns nem annyira tökéletes)

Viszont amíg ez nincs, addig nincs névfeloldás.
A build idejére átirányítanám a routerre, de nem tudom hogyan. :(
Nagyonbb baj, hogy a dokcer-compose-ban sem találom, hogy lehetne ilyen megcsinálni.

Millió helyen kérdeztem, de kb. senki sem érti, mi a gond.
Ti tudnátok tippet adni?

upd: ahogy lentebb írtam egy kommentben, a host névfeloldásával nincs gond, csak a konténerek zakkannak meg, ha ezt a konténerben futó dnsmasq-ot kirántom alóluk.
 
1

Jól értem,

Pepita · 2020. Okt. 15. (Cs), 11.45
hogy az a probléma, hogy amíg telepít(ene), addig nincs dns, így nem tud telepíteni?

Ha igen, akkor szerintem az lesz a megoldás, hogy build idejére (kézzel) beállítasz valamit, aztán a kész buildelt image-et tárolod magadnak... Nyilván így (verzió-) frissítéskor igen kényelmetlen, de hirtelen nem tudok jobbat.
2

A kerdes az, hogy

mind1 valami név · 2020. Okt. 15. (Cs), 13.10
A kerdes az, hogy hogyan.
Különösen, ha compose-t használnék.
Amit eddig találtam: build alatt nincs rá opció, docker run esetén meg bekerül a konténerbe, nem csak a build idejére használja (plusz ezt nem is tudom beírni a .yml-bel)
3

Host gépen

Pepita · 2020. Okt. 16. (P), 09.43
A host gépet állítod egy "normális" dns szerverre, azon keresztül "kilát" a build.
Utána állíthatod a kész konténerre.
4

Ja, félreérthető voltam: csak

mind1 valami név · 2020. Okt. 16. (P), 11.38
Ja, félreérthető voltam: csak a konténer nem lát ki.
A hostnak a másodlagos a systemd-n keresztül működik valahogy.


Egyébként kicsit el is néztem a dolgokat, lásd külön komment! (rögtön írom)
5

Egyre izgalmasabb a

mind1 valami név · 2020. Okt. 16. (P), 11.48
Egyre izgalmasabb a dolog.

Az alap az volt, hogy külön gépen futó DNS esetében sehol semmi gondom nem volt.
Aztán megpróbáltam átállni arra, hogy "a" szerveren konténerben fut a syslog-ng és a dnsmasq, a szerver több IP címéből egy sokadlagoson publikálva.
host: 172.16.1.2, 172.16.2.2, 172.16.3.2
A második IP forgalma 1:1-ben átirányítva egy ugyanezen a gépen futó kvm guestre, a harmadikon publikálom a konténeres szolgáltatásokat.

A hoston ubuntu van, ha az ufw-t kikapcsolom, akkor minden OK.
De ha bekapcsolom...
Külső gépről, pl. a laptopomról gond nélkül elérem a 172.16.3.2 címen futó DNS-t és syslog szervert is.
Viszont ugyanez hoston belül valamiért nem megy. Bizonyos esetekben látszik a journalctl-ben, hogy a UFW blokkolja, máskor nem - ez utóbbi lehet, hogy az én bűnöm.

Mindezeket tetézi, hogy bár a docker lehetőséget ad rá, hogy letiltsam az iptables buzerálást részéről, de olyankor egyáltalán nem működik a konténerekben a hálózat.
Összességében: nem értem.
6

Hálózat

Pepita · 2020. Okt. 16. (P), 13.52
Ez így szerintem nem docker-probléma, hanem hálózati. Mivel sem ubuntun, sem hálózati kérdésben nem vagyok profi, legfeljebb tippelgetni tudok.
a docker lehetőséget ad rá, hogy letiltsam az iptables buzerálást részéről, de olyankor egyáltalán nem működik a konténerekben a hálózat
Ha jól tudom, pont ahhoz (is) kell buzerálja, hogy az alap bridge networköt felépítse. Szerintem ha letiltod, akkor neked kell megcsinálni a host gépen valahogy.

Nem tudom segít - e valamennyit, de Docker for windows beállításai között van Network fül, ahol megadható Subnet Address + Mask. Itt kellett megfelelőt beállítsak, amikor a VPN "adapter" letiltotta (amikor fent voltam a VPN-en), kerestem olyan címet, amit megengedett a VPN is.
Talán valami ilyesmit kéne keress Te is, de a Te host gépedre szabottan.
7

Igen, ha ezt letiltom, akkor

mind1 valami név · 2020. Okt. 16. (P), 15.57
Igen, ha ezt letiltom, akkor pár alapbeállítást megcsinál, de a legtöbbet nekem kell beírnom, ami megfelelő hálózatos ismeretek nélkül nem triviális:)
Időközben még nyomozgattam, úgy fest, nem nagyon fogom tudni megoldani úgy, ahogy nekem kellene.
Ugyanis a szeparáció nevében a kontérek a hoston semmihez sem férhetnek hozzá. Elvileg. Úgy látom, nem IP cím alapján szűr, hanem a docker adaptere felől érkező összes packetet. Megkerülni meg tudom, inkább csak érteni szeretném, hogy mi is történik, amikor egy adott szolgáltatás bárhonnan elérhető, csak a többi konténerből nem.

Ha lenne lehetőség trace-elni az iptables működését (úgy, hogy én is értsem), akkor talán összejönne.
8

fájl szinten hozzáférhet

Pepita · 2020. Okt. 19. (H), 14.39
a kontérek a hoston semmihez sem férhetnek hozzá
Fájl szinten hozzáférhet -> mount (volume).
egy adott szolgáltatás bárhonnan elérhető, csak a többi konténerből nem
Egyik konténer simán eléri a másikat, megadott porton.
Példa docker-compose.yaml:
version: '3'

services:

  apache-php:
    build:
      context: ./docker/apache_php
      dockerfile: Dockerfile
      args:
        APACHE_DOCUMENT_ROOT: "/var/www/public"
    container_name: apache-php
    ports:
      - 80:80
    environment:
      APP_ENV: "dev"
    volumes:
      - ./:/var/www/

  memcached:
    image: memcached
    ports:
      - "11211:11211"
    container_name: memcached

networks:
  default:
    driver: bridge
Csatlakozás php-ból memcached szolgáltatáshoz:
<?php

$memcached = new Memcached();
$memcached->addServer('memcached', 11211); // host, port
$memcached->set('test', 'Test value.', 60);
$testValue  = $memcached->get('test');

echo('<p>Memcached test: "' . (string) $testValue . '"</p>');
if ($testValue === false) {
    echo('<p>Memcached not working!</p><pre>');
    var_dump($memcached->getServerList());
    var_dump($_SERVER);
}
Itt a 'memcached' host a service neve, "gyári" bridge network esetén.
9

docker network ls Ez rejti a

mind1 valami név · 2020. Okt. 19. (H), 16.03
docker network ls
Ez rejti a megoldást.
A konténerekkel létrejön egy privát háló, amin keresztül név alapján elérik egymást.
Ott a gond, hogy én a host IP-jén akarom elérni a szolgáltatásokat és ez alapjáraton nem megy.
Ennek az az oka, hogy olyan közös szolgáltatásokat akarok elérni, mint dns, syslog, proxy, emiatt a privát net workaroundként elmegy, de jobban örülnék, ha nem kellene kívülről más úton elérni, mint a hoston lévő konténerekből.
10

links nem tud ilyet?

Pepita · 2020. Okt. 20. (K), 08.35
Van itt némi infó, a yml:
version: "3"
services:

  web:
    build: .
    links:
      - "db:database"
    ports:
      - "8000:8000"
  db:
    image: postgres
Itt a db konténert felejtsük el, links-be pedig a "db" helyett próbáld ki a 127.0.0.1-et, vagy a kívánt IP-t. Sose próbáltam, de hátha. :)

Remélem azért lesz rá megoldás egyszer...
11

Deprecated. :)

mind1 valami név · 2020. Okt. 20. (K), 09.00
Deprecated. :)
12

Hoppá :)

Pepita · 2020. Okt. 21. (Sze), 08.52
Bocsi, nem figyeltem eléggé, viszont akkor kéne lennie más megoldásnak rá, pl networks beállítás alatt. Valahol tuti lehet alias-olni, ott kéne megpróbálni "megetetni vele" az IP-t.