Как включить привязку портов в контейнерах без root?
У меня есть колба, работающая на экземпляре Ec-2. Я мог получить к нему доступ из внешней среды с http:ip-address:5000
где IP-адрес - публичный адрес моего экземпляра ec-2.
Код моей колбы:
from flask import Flask
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def my_form_post():
return "Hello World"
if __name__ == '__main__':
app.run(host="my-ec2-private-address", port=5000, debug=True)
Я докеризировал приложение фляги, используя следующее Dockerfile
:
FROM python:2.7
MAINTAINER noob-reaper
COPY . /Mini
WORKDIR /Mini
RUN pip install -r requirements.txt
EXPOSE 5000
CMD python miniRobot.py
Моя команда сборки была:docker build -t robot .
Сборка прошла успешно. Но когда я пытаюсь запустить с помощью следующей команды:docker run -p 5000:5000 robot
Я получаю следующую ошибку ---port bindings are not yet supported by rootless containers
Как решить вышеуказанную проблему? Есть ли способ получить доступ к службе фляги, работающей в контейнере Docker, в экземпляре ec-2 извне?
2 ответа
С помощью sudo
При создании образов Docker и запуске Docker Container удалось решить эту проблему. sudo
помогает запускать некорневые контейнеры
Я подозреваю, что пользователь на вашем компьютере, с помощью которого вы запускаете команду docker, не является пользователем root.
Предположим, ваш текущий пользователь на ec2-машине user1
(Вы можете проверить это, запустив users
команда). Затем запустите эту команду, чтобы добавить user1 в docker group
,
usermod -aG docker user1
а затем попробуйте запустить свой контейнер.
Попробуйте это и дайте мне знать.
Для получения дополнительной информации о том, что такое контейнер без root, проверьте это.