Создание локального каталога для редактирования кода после извлечения нового кода - PullRequest
0 голосов
/ 22 марта 2019

Я застрял, пытаясь понять, как редактировать код фляги Python после извлечения из хранилища Docker Hub на другом компьютере. Я хочу создать папку на своем рабочем столе Linux, которая будет содержать все пакеты, которые образ имеет при запуске в качестве контейнера (Dockerfile, needs.txt, app.py), чтобы я мог редактировать app.py независимо от того, какой у меня компьютер или даже если мои одноклассники захотят отредактировать его, они могут просто вытащить мое изображение, запустить контейнер и иметь возможность сохранить копию кода, сохраненную на их локальном компьютере, чтобы они могли открыть его с помощью кода Visual Studio (или любой IDE) и отредактируйте его. Это то, что я пытался. Я впервые вытащил из докера хаб:

sudo docker pull woonx/dockertester1

Затем использовал эту команду для запуска образа в качестве контейнера и создания каталога:

sudo docker  run --name=test1 -v ~/testfile:/var/lib/docker -p 4000:80 woonx/dockertester1

Мне удалось создать локальный каталог с именем testfile, но когда я открывал его, это была пустая папка. Нет app.py, dockerfile, ничего.

Пример кода, который я использую для тестирования, взят из примера руководства на веб-сайте Docker: https://docs.docker.com/get-started/part2/

Dockerfile:

# Use an official Python runtime as a parent image
FROM python:2.7-slim

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

# Define environment variable
ENV NAME World

# Run app.py when the container launches
CMD ["python", "app.py"]

requirements.txt:

Flask 
Redis

app.py:

from flask import Flask
from redis import Redis, RedisError
import os
import socket

# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)

app = Flask(__name__)

@app.route("/")
def hello():
    try:
        visits = redis.incr("counter")
    except RedisError:
        visits = "<i>cannot connect to Redis, counter disabled</i>"

    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>" \
           "<b>Visits:</b> {visits}"
    return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

1 Ответ

0 голосов
/ 22 марта 2019

Что я делаю,Сначала я запускаю команду docker run.

sudo docker  run --name=test1 -v ~/testfile:/var/lib/docker -p 4000:80 woonx/dockertester1

На этом этапе файлы создаются в контейнере.Затем я останавливаю контейнер (допустим, идентификатор контейнера 0101010101).

docker container stop 0101010101

Я просто копирую эти файлы из контейнера в соответствующий каталог на моем компьютере, используя:

 docker cp <container_name>:/path/in/container /path/of/host 

  or 

 cd ~/testfile
 docker cp <container_name>:/path/in/container . 

Итак, у вас есть файлы, созданные докером, на вашем локальном хосте.Теперь вы можете использовать их с опцией -v .

sudo docker  run --name=test1 -v ~/testfile:/var/lib/docker -p 4000:80 woonx/dockertester1

Обычно, когда вы изменяете настройку в вашей конфигурации, должно быть достаточно, чтобы остановить / запустить контейнер, чтобы начать действовать.

Я надеюсь, что этот подход решит вашу проблему.

С уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...