Примеры ОС, оптимизированных для работы с контейнерами
Я проследил всю документацию здесь: https://cloud.google.com/container-optimized-os/docs/ чтобы попытаться обновить мою существующую конфигурацию, в которой использовались образы container-vm, которые уже устарели, до новой конфигурации. использование оптимизированной для контейнера ОС. Но ничего не работает! Я не могу заставить контейнер Docker связываться с портом 80 (т.е. -p 80:80), а также мой контейнер Docker не может писать в /var/run/nginx.pid (да, я использую nginx в мой докер контейнер). Я следовал инструкциям по отключению AppArmour, а также пытался создать профиль AppArmour для nginx. Ничего не работает! Являются ли они любыми примерами использования оптимизированной для контейнеров ОС, которая не просто использует изображение busybox и печатает "Hello World" или sleep! Как насчет примера, который открывает порт и пишет в файловую систему?
1 ответ
Я только что установил Apache Guacamole на ОС Container Optimized, и он работает как шарм. Есть некоторые ограничения для безопасности.
Корневая файловая система ("/") монтируется как доступная только для чтения, а некоторые ее части монтируются как доступные для записи следующим образом:
/ tmp, / run, / media, / mnt / disk и /var/lib/cloud монтируются с использованием tmpfs и, хотя они доступны для записи, их содержимое не сохраняется между перезагрузками.
Каталоги /mnt/stateful_partition, /var и / home монтируются из раздела диска с состоянием, что означает, что эти места могут использоваться для хранения данных, сохраняющихся при перезагрузках. Например, рабочая папка Docker /var/lib/docker сохраняет состояние при перезагрузке.
- Из доступных для записи мест только /var/lib/docker и /var/lib/cloud монтируются как "исполняемые" (т.е. без флага монтирования noexec).
Если вам нужно принимать HTTP-соединения (порт 80) с любого IP- адреса источника, выполните следующие команды на экземпляре операционной системы, оптимизированной для контейнера:
sudo iptables -w -A INPUT -p tcp --dport 80 -j ACCEPT
В общем случае рекомендуется настроить межсетевой экран хоста в качестве службы systemd через cloud-init.
PS: Контейнер-оптимизированная ОС способна автоматически обновляться. Этот механизм можно использовать для обновления парка экземпляров Compute Engine.
Я не могу заставить контейнер Docker привязаться к порту 80 (т.е. -p 80:80), а также мой контейнер Docker не может писать в /var/run/nginx.pid (да, я использую nginx в мой контейнер Docker).
Я думаю, у вас может быть проблема с брандмауэром GCE. Лучшим способом будет поэтапная проверка / отладка:
Попробуйте запустить глупо простой контейнер nginx: "-d" просит Docker запустить его в режиме демона, "-p 80:80" отображает порт HTTP, а "--name nginx-hello" имена контейнера для nginx-hello.
docker run -d --name nginx-hello -p 80:80 nginx
(необязательно) Проверяет правильность работы контейнера: вы должны увидеть в списке контейнер "nginx-hello".
docker ps
Проверяет, что nginx работает локально: вы должны увидеть хороший HTTP-ответ.
curl localhost:80
Если вы можете правильно проверить все вышеперечисленные шаги, вы, вероятно, столкнетесь с проблемой брандмауэра GCE: