Запуск OpenMapTilesServer на RHEL8 с Podman - PullRequest
0 голосов
/ 04 ноября 2019

У меня проблема при попытке запустить OpenMapTilesServer в RedHat 8 с Podman.

Это мой стартовый скрипт:

sudo podman run -d -v $(pwd):/data -p 8080:80 docker.io/klokantech/openmaptiles-server

Изображение тянет нормально, и кажется, что оно запускается нормально. Я могу выполнить

podman ps 

и посмотреть контейнер. Все выглядит хорошо. Если я просматриваю журнал, используя

podman logs <containerID>

, я не вижу ничего, что я считаю проблемой, однако, когда я пытаюсь попасть на домашнюю страницу http://localhost:8080,, тогда я получаю сайт не найден.

Я думал, что это может быть проблема с брандмауэром, поэтому я отключил брандмауэр, но результаты те же. Я также подтвердил, установив Tomcat и запустив его для обслуживания нескольких HTML-страниц. Все это работает без ошибок.

Кто-то может предложить дальнейшую отладку, которую я могу сделать, чтобы это продолжалось? спасибо ...

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Это копия предыдущего поста, так как он не читается без форматирования. Он показывает последний скрипт запуска, который я использую для запуска контейнера OpenMapTiles-Server.

mkdir -p /home/mapprov/Mapping/logs/apt
mkdir -p /home/mapprov/Mapping/logs/supervisor
mkdir -p /home/mapprov/Mapping/logs/nginx


sudo podman run  -d \
         -v /home/mapprov/Mapping:/data:ro,z \
         -v /home/mapprov/Mapping/logs:/var/log:rw,z \
         -p 8080:80/tcp  \
          klokantech/openmaptiles-server  
1 голос
/ 05 ноября 2019

Я развернул виртуальную машину CentOS 8, чтобы проверить это, и выполнение команды podman из вашего поста привело к сбою. Я потратил немного времени этим утром, пытаясь выяснить, что происходит.

Глядя на вывод podman run, я вижу следующую ошибку:

[root@localhost data]# podman run --name tiles -v /tmp/data:/data -p 8080:80 docker.io/klokantech/openmaptiles-server
[...]
2019-11-05 12:29:26,812 INFO exited: wizard (exit status 1; not expected)

Если я podman exec в контейнер, я могу вручную запустить команду wizard и посмотреть более подробные журналы. Во-первых, нам нужно выяснить, где живет команда wizard. Поскольку контейнер использует supervisord в качестве супервизора процесса, это означает, что нам, вероятно, нужно просмотреть в /etc/supervisor подробности:

[root@localhost ~]# podman exec -it tiles bash
root@de362646e453:/etc/supervisor# cd /etc/supervisor/
root@de362646e453:/etc/supervisor# ls
conf.d  supervisord.conf
root@de362646e453:/etc/supervisor# cd conf.d/
root@de362646e453:/etc/supervisor/conf.d# ls
openmaptiles.conf
root@de362646e453:/etc/supervisor/conf.d# cat openmaptiles.conf
[program:wizard]
command=/bin/bash -c "cd /usr/local/src && node wizard"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
autostart=true
autorestart=false
startsecs=0

Ключевой информацией является строка command в openmaptiles.confфайл. Давайте попробуем выполнить ту же команду вручную:

root@de362646e453:/# cd /usr/local/src/
root@de362646e453:/usr/local/src# node wizard
Starting OpenMapTiles Map Server (action: run)
fs.js:961
  return binding.readdir(pathModule._makeLong(path), options.encoding);
                 ^

Error: EACCES: permission denied, scandir '/data'
    at Error (native)
    at Object.fs.readdirSync (fs.js:961:18)
    at Wizard.init (/usr/local/src/wizard/src/main.js:928:19)
    at new Wizard (/usr/local/src/wizard/src/main.js:119:8)
    at Object.<anonymous> (/usr/local/src/wizard/src/main.js:1270:1)
    at Module._compile (module.js:577:32)
    at Object.Module._extensions..js (module.js:586:10)
    at Module.load (module.js:494:32)
    at tryModuleLoad (module.js:453:12)
    at Function.Module._load (module.js:445:3)

Мы получаем сообщение об ошибке «Отказано в доступе» в каталоге /data. Разрешения выглядят хорошо:

root@de362646e453:/# ls -ld /data
drwxr-xr-x. 2 root root 6 Nov  5 12:08 /data

Но мы не можем получить к нему доступ:

root@de362646e453:/# cd /data
root@de362646e453:/data# ls
ls: cannot open directory '.': Permission denied

Если права доступа к файлам выглядят нормально, но вы все еще не можете получить доступ к чему-либо, это частоозначает, что пришло время взглянуть на вашу конфигурацию selinux. RHEL (и CentOS) оба по умолчанию имеют включенный selinux. Это предотвратит доступ контейнера к частям вашей файловой системы, к которым им явно не предоставлен доступ.

Сначала на хосте давайте проверим, что selinux работает в режиме enforcing:

[root@localhost ~]# getenforce
Enforcing

Это (как и ожидалось). Давайте переведем его в разрешительный режим и посмотрим, решит ли это нашу проблему:

[root@localhost ~]# setenforce 0

А теперь внутри контейнера давайте попробуем снова получить доступ к каталогу /data:

[root@localhost ~]# podman exec -it tiles bash
root@de362646e453:/# ls /data
root@de362646e453:/#

Отлично! Больше ошибок нет. Давайте попробуем перезапустить контейнер:

[root@localhost data]# podman run --name tiles -v $(pwd):/data -p 8080:80 docker.io/klokantech/openmaptiles-server
/usr/lib/python2.7/dist-packages/supervisor/options.py:298: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
  'Supervisord is running as root and it is searching '
2019-11-05 12:37:18,493 CRIT Supervisor running as root (no user in config file)
2019-11-05 12:37:18,493 INFO Included extra file "/etc/supervisor/conf.d/openmaptiles.conf" during parsing
2019-11-05 12:37:18,498 INFO Creating socket tcp://localhost:8081
2019-11-05 12:37:18,500 INFO Closing socket tcp://localhost:8081
2019-11-05 12:37:18,510 INFO RPC interface 'supervisor' initialized
2019-11-05 12:37:18,511 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2019-11-05 12:37:18,511 INFO supervisord started with pid 1
2019-11-05 12:37:19,514 INFO spawned: 'wizard' with pid 8
2019-11-05 12:37:19,516 INFO spawned: 'xvfb' with pid 9
Starting OpenMapTiles Map Server (action: run)
2019-11-05 12:37:19,954 INFO success: wizard entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
2019-11-05 12:37:19,954 INFO success: xvfb entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
Config file not found!
Starting installation...
Installation wizard started at http://:::80/
List of available downloads ready.

Это похоже на успешный запуск, и теперь я могу получить доступ к серверу плиток через порт хоста 8080.


Теперь мыУ нас есть решение:

  1. Мы можем постоянно отключать selinux или
  2. Мы можем обновить нашу конфигурацию selinux, чтобы разрешить доступ, который в настоящее время запрещен.

Я бы обычно предложил (2), но похоже, что политика selinux по умолчанию в CentOS 8 имеет некоторые глупые значения по умолчанию, которые усложняют процесс (сообщения журнала аудита, которые идентифицируют проблему, отключены), поэтому давайте перейдем к (1):

  1. Редактировать /etc/selinux/config.

  2. Изменить SELINUX=enforcing на SELINUX=permissive (разрешает доступ, но selinux все еще активен ибудет регистрировать нарушения политики) или SELINUX=disabled.

  3. Перезагрузиться, чтобы убедиться, что изменение остается в ожидаемом состоянии.

С этим изменением мой CentOS8 ВМ теперь может без проблем запускать сервер плиток.

...