【问题标题】:Creating a local directory to edit code after pulling new code拉取新代码后创建本地目录以编辑代码
【发布时间】:2019-03-22 04:43:59
【问题描述】:

在从另一台计算机上的 Docker Hub 存储库中提取后,我一直试图弄清楚如何编辑 python 烧瓶代码。我想在我的 Linux 桌面中创建一个文件夹,其中包含图像作为容器运行时所具有的所有包(Dockerfile、requirements.txt、app.py),这样无论我拥有什么计算机,我都可以编辑 app.py或者即使我的同学想要编辑它,他们也可以简单地拉出我的图像,运行容器,并能够在他们的本地计算机上保存一份代码副本,以便他们使用 Visual Studio Code(或任何 IDE)打开它并编辑它。这是我尝试过的。 我首先从 Docker 集线器中提取:

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)

【问题讨论】:

  • 这听起来像是在寻找 Git 存储库而不是 Docker 映像。 (您想共享源代码本身,而不是不透明的构建二进制文件。)

标签: linux docker docker-compose dockerfile


【解决方案1】:

我所做的是; 首先,我发出 docker run 命令。

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

在这个阶段,文件在容器中创建。然后我停止容器(假设容器 id 是 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 . 

因此,您已在本地主机上运行 docker run 创建的文件。现在您可以将它们与 -v 选项一起使用。

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

通常,当您更改配置中的设置时,停止/启动容器就足够了。

我希望这种方法可以解决您的问题。

问候

【讨论】:

    猜你喜欢
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多