在docker-compose中进行开发。使容器识别代码更改

时间:2019-03-31 18:10:33

标签: docker docker-compose containers

我有一个带有Python3环境并安装了各种库的docker-container。

我正在尝试针对这种环境开发一个简单的Python程序。

所以我有一个带有源代码的卷,该源代码位于容器外部,该容器已添加并在Dockerfile中设置为WORKDIR。

然后我要进入容器并尝试在命令行上运行程序。

遇到错误时,我只想在容器外部的编辑器中更改源,然后再次运行。

但是,当我这样做时,容器中正在执行的代码似乎并没有注意到我所做的更改。

如果我这样做

docker-compose up --build 

然后重建容器。

显然这很慢。

容器肯定应该可以看到我正在处理的代码更改而无需重新构建吗?如果是这样,我该如何实现?

1 个答案:

答案 0 :(得分:4)

使用ADD将文件烘焙到容器映像中,因此,您已经注意到,在运行的应用程序中更新文件需要重新构建并重新启动整个容器。要解决此问题,您可以使用ADD将主机上的目录挂载到您复制到容器中的路径上。

要在Docker上执行此操作,可以使用-v--volume。使用Docker Compose,您可以在volumes:下列出要挂载的目录。例如,如果您的构建文件中包含以下内容:

# Copy app code into the container working directory
ADD /my/app/code /usr/app/src

然后,您可以在容器启动时将 live 代码挂载在烘焙文件上(请注意,目录路径必须是绝对路径-您可以使用$PWD):

$ docker run -v /my/live/app/code:/usr/app/src python:latest
$ docker run -v "$PWD"/app/code:/usr/app/src python:latest

等效的docker-compose.yml如下:

my-service:
  image: python:latest
  volumes:
    - /my/live/app/code:/usr/app/src
    - ./relative/paths:/work/too

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-how-to-choose-event.html中有更多有关绑定安装的信息。