В системе запущен контейнер без root-доступа на основе docker.io/rocker/shiny-verse:latest
изображение, которое публикует порт (скажем, 8000) для удаленных веб-подключений (для доступа к блестящему пользовательскому интерфейсу). В shiny
серверу, работающему в контейнере, требуется доступ к базе данных, работающей на удаленном хосте. Локальный хост, на котором работает контейнер, использует туннель SSH (вне контейнера), чтобы обернуть соединение с базой данных с локального хоста на удаленный сервер базы данных. Основные шаги для воспроизведения (без учетных данных):
$ # In host environment (logged in as unprivileged account that runs rootless container)...
$ ssh -fvNx -L 5432:localhost:5432 dbuser@dbserver
$ psql -h 127.0.0.1 -p 5432 ... # Able to connect to database from host environment (using non-privileged account that runs the rootless container)
$ Rscript -e ‘x <- pool::dbPool(drv = RPostgreSQL::PostgreSQL(), ....)’ # Command succeeds
$ podman run —rm -it —publish 8000:8000 —expose 5432 —entrypoint ‘[“R”]’ docker.io/rocker/shiny-verse:latest
> # Within container interactive R session...
> x <- pool::dbPool(drv = RPostgreSQL::PostgreSQL(), ....)
> # Error in postgresqlNewConnection(drv, ...):
> # RS-DBI driver ... could not connect ... Is the server running ... and accepting connections ...
Поскольку я не могу (или не думаю, что могу) опубликовать порт 5432 при запуске podman run ...
(поскольку порт уже привязан к SSH-туннелю, запущенному на хосте), как я могу запустить образ контейнера, чтобы я мог использовать SSH-туннель, установленный на хосте, из контейнера для доступа к удаленной базе данных?
—network=host
возможность podman run
решает проблему, он кажется слишком допустимым, чтобы сохранить некоторые важные преимущества безопасности без корневых контейнеровpodman 1.9.2
Fedora 32 (5.6.14-300.fc32.x96_64)
R 4.0.0
OpenSSH_8.2p1
OpenSSL 1.1.1g