Відкриття портів у Dockerfile

Середній рівень Docker

Mike Metzger

Data Engineer

Публікація сервісів

  • Команда EXPOSE
  • Визначає, які порти контейнер використовує під час виконання
  • Можна задати як <number>, <number>/tcp або <number>/udp
    • Наприклад, EXPOSE 80 або EXPOSE 80/tcp
  • Дозволено кілька записів
  • Слугує як документація
Середній рівень Docker

Використання прапорців -p / -P

  • Потрібно все одно використовувати параметри -p або -P у docker run, щоб зробити порти доступними поза контейнером
  • Опція -P автоматично зіставляє еферемерний порт із відкритим(ими). Перегляньте docker ps -a, щоб побачити відповідність портів.
  • Використання -p<порт хоста>:<порт контейнера> дозволяє вказати конкретні порти.
Середній рівень Docker

Приклад EXPOSE

# Dockerfile
FROM python:3.11-slim
ENTRYPOINT ["python","-mhttp.server"]
# Let the Docker engine know 
# port 8000 should be available
EXPOSE 8000
  • Створіть контейнер з образу
    docker run pyserver
    
  • Виведіть стан контейнера
    docker ps -a
    
CONTAINER ID   IMAGE         ...   PORTS      NAMES
8c3d320255ae   pyserver      ...   8000/tcp   angry_chaum
Середній рівень Docker

Робимо порти доступними

  • Автоматично зіставити тимчасовий порт хоста з портом контейнера
    docker run -P pyserver
    
docker ps -a
CONTAINER ID   IMAGE      ...   PORTS                     NAMES
6bb458ef25da   pyserver   ...   0.0.0.0:55001->8000/tcp   beautiful_lamarr
Середній рівень Docker

Пошук відкритих портів

  • docker inspect надає багато інформації
    docker inspect <id>
    
"NetworkSettings": {
  "Bridge": "",
  "Ports": {
    "8000/tcp": [{
                   "HostIp": "0.0.0.0",
                   "HostPort": "55001"
                    }]
            },
...
Середній рівень Docker

Давайте потренуємось!

Середній рівень Docker

Preparing Video For Download...