Open rzeh4n opened 7 years ago
Takže nějspíš pro editor nestačí databáze dostupná jen na localhostu. To nestačí, každý ta service v docker-composu má vlastní IP.
Pokud chceš ten postgres zavřít, mělo by postačit upravit ports na:
ports:
- "5432"
Pak na to editor uvidí, ale zůstane to viditelné pouze z vnitřní sítě dockeru (neproroutuje se to ven). Pokud to bude fungovat, docker-compose upravím.
Jo, tohle trochu pomůže, protože navenek už to nebude na portu 5432, ale nějakém náhodném. Ale pořád je ten port dostupný zvenku.
ports Expose ports. Either specify both ports (HOST:CONTAINER), or just the container port (a random host port will be chosen).
Takže namísto
0.0.0.0:5432->5432/tcp
bude v docker ps třeba
0.0.0.0:32837->5432/tcp
Ještě jsem zkusil direktivu ports úplně odstranit a ono to funguje i tak. Evidentně ports slouží k zvěřejnění portů ale v rámci docker-compose sítě to není potřeba dělat. V docker ps má tak kontejner v PORTS akorát tohle:
5432/tcp
I v téhle konfiguraci je editor napojený na databázi, sledoval jsem tabulku action a přibývaly tam záznamy, jak jsem otevíral věci.
Po každém pokusu jsem pro jistotu mazal všechno takhle:
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker system prune
Aha, to je protože v Dockerfilu Postgresu je zadefinována direktiva expose
Potom se to vždy otevře, možná to jde v některé novější verzi docker-compose přepsat, ale nejsem si jistý.
Možná by stačilo na wiki stránce k instalaci upozornit na tohle a doporučit změnu názvu databáze/loginu/hesla v docker-compose.yml a meditor.env a případně úpravu iptables.
Toto bude nakonec asi nejjednodušší :-)
A co teda odstranit ports z docker-compose.yml? Jakože
meditorPostgres:
#https://hub.docker.com/_/postgres/
image: "postgres:9.6"
environment:
- POSTGRES_USER=meditor
- POSTGRES_PASSWORD=meditor
- POSTGRES_DB=meditor
- TERM=xterm
networks:
default:
Protože takhle je 5432 exposed ale jenom do vnitřní sítě pro docker-compose. Např.:
root@editor:~/s2i-meditor/example# docker network ls
NETWORK ID NAME DRIVER SCOPE
6aecbe015c3d bridge bridge local
59e322631572 example_default bridge local
f428a856ba34 host host local
efc7c65d113c none null local
root@editor:~/s2i-meditor/example# docker network inspect 59
[
{
"Name": "example_default",
"Id": "59e3226315721568bc6b71c21369df06e686421700ebef354547a77747a5e9ee",
"Created": "2017-06-14T11:12:51.759757231+02:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {
"2c202bf0c39be9389c23e4b4c79d0212ae44a381202b8f536fdc09217d9ad167": {
"Name": "example_keycloakbackend_1",
"EndpointID": "646c693883d1c39b75b26c74434768f31a2c3b40d63d2941a927c7e9ad8ffc37",
"MacAddress": "02:42:ac:12:00:04",
"IPv4Address": "172.18.0.4/16",
"IPv6Address": ""
},
"984cc925b7bf68021934862c766e7e13d736c28357104152ea7f9c71601d5839": {
"Name": "example_proxy_1",
"EndpointID": "f42926f5720132378285e520cdab9d2ff20267dda6c29df0c0436222718bf026",
"MacAddress": "02:42:ac:12:00:05",
"IPv4Address": "172.18.0.5/16",
"IPv6Address": ""
},
"e137740565f87d280c1915de265d74115c075651930fc32b85376c93a7497c17": {
"Name": "example_meditorPostgres_1",
"EndpointID": "d0ec086af82c92f009f223ddbc34655dca8d44b9cc296697b77f4a162ad90de9",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
},
"fb6434e5ef25d443aec211dd3077cc11290d9cd1bb653f516d91586c840af524": {
"Name": "example_meditor_1",
"EndpointID": "1f8bc694a726b803d95e0d743061052e1539e9626dbe05414a480071e1a5b29b",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
root@editor:~/s2i-meditor/example# psql -h SERVER_PUBLIC_IP -p 5432 -U meditor --password meditor
Password for user meditor:
psql: could not connect to server: Connection refused
Is the server running on host "SERVER_PUBLIC_IP" and accepting
TCP/IP connections on port 5432?
root@editor:~/s2i-meditor/example# psql -h 172.18.0.3 -p 5432 -U meditor --password meditor
Password for user meditor:
psql (9.6.3)
Type "help" for help.
meditor=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
meditor | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
meditor=#
Takže tam může editor (vyzkoušeno) a obecně všechny kontejnery přes 172.18.0.3:5432, ale na veřejné IP neposlouchá na portu 5432 nic, takže se tam rozhodně nedostanu z venku (vyzkoušeno). Imho ideální stav.
Když podle https://github.com/moravianlibrary/MEditor/wiki/Instalace rozjedu přes docker compose 4 dockerové kontejnery, tak jeden z nich (postgres:9.6) umožňuje na veřejné ip a portu 5432 přístup do databáze, přičemž defaultní název databáze, login i heslo je dohledatelné (všechno meditor).
Zkusil jsem upravit docker-compose.yml doplněním command následovně:
To vypadá, že funguje a přebije se listen_addresses v postgresql.conf. Jenže editor přestane fungovat, přičemž v hlavním logu kontejneru není nic.
Až teda v tomcat/logs/localhost.2017-06-13.log
Takže nějspíš pro editor nestačí databáze dostupná jen na localhostu.
Možná by stačilo na wiki stránce k instalaci upozornit na tohle a doporučit změnu názvu databáze/loginu/hesla v docker-compose.yml a meditor.env a případně úpravu iptables.