Как включить привязку портов в контейнерах без 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, проверьте это.

Другие вопросы по тегам