docker - 从另一个Docker容器中运行一个命令行命令并共享文件

标签 docker docker-compose jupyter-notebook

在主机命令行上运行docker时,我可以在容器中运行命令,该容器下载一组文件,并通过共享卷将这些文件共享回主机:
docker run --rm --volume "${PWD}":/contentmine --tty --interactive psychemedia/contentmine getpapers -q aardvark -o /contentmine/aardvark -x
我想要做的是能够从使用以下形式的docker-compose.yaml文件创建的Jupyter容器中运行相同的命令:

notebook:
  image: jupyter/notebook
  ports:
    - "8899:8888"
  volumes:
    - ./notebooks:/notebooks
    - /var/run/docker.sock:/var/run/docker.sock
  privileged: true 

在Jupyter笔记本代码单元中,我尝试运行:
#Make sure docker is available in the Jupyter container
!apt-get update
!apt-get install -y docker.io

!mkdir -p downloads
#Run a download command in another container and share the downloaded files back
! docker run --rm --volume "${PWD}/downloads":/contentmine --tty --interactive psychemedia/contentmine getpapers -q aardvark -o /contentmine/aardvark -x 

我可以看到文件被下载到某个地方,但是我不知道在哪里?它们是否已下载到Jupyter容器外部的Docker VM上下文中?如何在我用来运行文件下载命令行容器的临时容器中的笔记本容器中挂载目录?

作为问题的第二部分,我还希望能够将downloads目录中的文件用作在另一个容器中运行的另一个命令行命令的输入,并将结果的副本再次保存在笔记本容器downloads目录中:
docker run --rm --volume "${PWD}/downloads":/contentmine --tty --interactive psychemedia/contentmine norma --project /contentmine/aardvark -i fulltext.xml -o scholarly.html --transform nlm2html
大概,如果问题的第一部分有快速解决方案,那么对这一部分是否适用相同的解决方案?

最佳答案

我认为您正在寻找的答案包括创建一个命名容器,并将其指定为downloads/的安装点,然后在以后的 session 中使用创建的容器将其安装到任何容器中。

关于docker - 从另一个Docker容器中运行一个命令行命令并共享文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37087866/

相关文章:

docker - 从docker-compose将shell命令结果传递给Dockerfile

docker 与共享文件夹 d 驱动器

docker - 使用 docker 镜像使用 dockerfile 构建不同的 docker 镜像

python - 如何让 Jupylet 应用程序在 Jupyter Notebook 的 if 语句中运行

docker - Docker- 'container is not running',即使我刚刚对其进行了初始化

linux - 在 Linux 上模拟分布式系统的最轻量级方法

docker - Docker撰写与mariaDB的链接

import - 从 jupyter notebook 调用 julia 函数(导入 Julia jupyter notebook)

python - 在 Jupyter 中切换内核

docker - 跨 docker pod 的 Spring Boot Controller 重定向