在使用docker-compose时,构建没有开始,或者无法启动。或者在忘记的时候突然启动
无论是执行docker-compose up还是docker-compose build,但building <服务名称> 仍然未能继续进行。感觉像是被挂起了一样,无法继续运行。
在Docker桌面版的设置(首选项)中,[资源]-[文件共享]部分包含了相应目录的父目录。事实上,刚才还能正常工作,但突然间停止工作了,而且我什么都没做。
简而言之,今北产业。
-
- 可能性があるのは、大量のファイルがDockerデーモンによってバックグラウンドで読み込まれていることです。
docker-composeを使わずに、docker build -t test:local .というコマンドを使用してDockerでビルドし、永遠に転送されている場合は、成功です。
.dockerignoreファイルを使用して、大量のファイルのあるディレクトリを除外し、docker-compose.jsonファイル内で別途マウントする必要があります。
太长;高亮(只需要概括到达明确事项为止)
刚刚还在运行docker-compose run –rm 的机器学习镜像突然无法启动了。即使尝试了docker-compose build –no-cache重新构建,问题依然存在。
不仅仅是无法启动,而且是一直停在原地的状态。
$ docker-compose build --no-cache
Building sample_service1 ← ここでハングってる
所以,我停止了Ctrl+c的处理,并尝试了写经,就像说一个僧侣一样——试了一下–verbose。
$ docker-compose build --no-cache
Building sample_service1 ← ここでハングってる
^CERROR: Aborting.
$ docker-compose --verbose build --no-cache
compose.config.config.find: Using configuration files: ./docker-compose.yml
...省略...
compose.service.build: Building sample_service1
compose.cli.verbose_proxy.proxy_callable: docker build <- (path='~/Desktop/Sample', tag='samp
le:local', rm=True, forcerm=False, pull=False, nocache=True, dockerfile=None, cache_from=None
, labels=None, buildargs={}, network_mode=None, target=None, shmsize=None, extra_hosts=None,
container_limits={'memory': None}, gzip=False, isolation=None, platform=None) ← ここで止まる
您好,上述的compose.cli.verbose_proxy.proxy_callable: 代码中,docker-compose 调用 docker build 并停在此处。
有时候,当Docker在拉取映像时,如果网络或拉取源很慢,可能会出现反应延迟的情况,并且这种延迟的感觉总是比平常更久。
在中文中,将“切り分け(やったこと)”改述为一种可能的表达方式:
解析(已完成的任务):
docker-compose build –no-cache → NG(現象同じ)
docker-compose down からの docker-compose up → NG(現象同じ)
docker-compose stop からの docker-compose up → NG(現象同じ)
docker-compose ps → NG(起動中コンテナなし)
docker container prune -f docker image prune -f からの docker-compose build –no-cache → NG(現象同じ)
docker-compose logs → NG(Attaching to が出るだけ)
ホスト OS の再起動 → NG(現象同じ)
docker run –rm hello-world:latest → OK(起動する)
docker-compose の “Hello World!” → OK(起動する)
通过以上的划分,可以判断出 Docker 和 docker-compose 本身还在运行,但当前的 Dockerfile 和 docker-compose.yml 可能存在问题。
然而,我并没有修改这些文件。因此,很可能是由于单独安装的脚本或镜像等原因。
于是,我尝试直接从 Docker 中构建一个个映像,而不通过 docker-compose。
$ docker build -t test:local .
Sending build context to Docker daemon xxxMB
然后,真是令人惊讶!上述的 xxxMB 不断地增加。看起来有大量的文件正在被发送到上下文中!
“是这样吗!!学习用的数据呀!!”
环境背景(context)在日语中有着“文本周围关系”、“情况”、“背景”、“状况”等含义。然而,在编程世界中,“文本周围关系”这个词并不常见。
环境背景由con-和text两部分组成,前缀con-表示“一起”或“附带”的意思,而text来源于“组装”、“编织”、“创建”、“构建”的teks-。所以,context在执行、判断或创建某事物时,提供了支持性的信息。
因此,Sending build context to … 的意思是“正在向…发送构建所需的信息(Docker镜像)”。
实际上,我为了机器学习准备了大量的数据卷(data目录)来挂载到容器里,但是我忘记了将目录名改为轻量级数据以进行操作确认。
由于data目录中的数据量很大,所以在.dockerignore中将其排除,然后在构建后进行挂载。然而,由于data被重命名为data2,所以在构建时,data2作为数据(上下文)被加载到内存中。
.dockerignore 中已经包含了 data,现在添加了问题的 data2 ,使其能够按照惯例正常运行,嘿嘿。
data
data2
Docker和Docker Compose之间的区别是什么?
Docker是用于单个容器操作的命令,而docker compose(即旧的docker-compose)是在同一台机器上创建虚拟网络并在其中操作多个容器的工具。
作为其上层,docker swarm是在同一网络(局域网)中的多台机器之间创建虚拟网络并在其中操作多个容器的工具。而更高级的工具如Kubernetes可以在多个网络(广域网)之间创建虚拟网络并在其中操作多个容器。
这些用于创建和操作多个容器和虚拟网络的工具称为编排工具。换句话说,docker compose也是编排工具之一,因此非常适合作为入门级的编排工具。
docker在创建和启动容器时,如果没有明确指定,会将容器放置在各自独立的虚拟网络中。
换言之,即在被称为”Docker网络”的虚拟局域网中,每个服务器(容器)创建一个唯一存在的网络。
因此,如果保持原样,容器之间的网络是不同的,因此无法相互通信。
如果想在同一网络中安装多个容器,您需要先使用`docker network create <网络名称>`命令创建网络,然后在启动容器时使用`–network <网络名称>`选项将容器加入该网络。
使用 Docker Compose 时,默认情况下,被列在 docker-compose.yaml 文件中的容器将被放置在同一个网络中。
因此,如果需要启动多个容器并使它们相互协作,使用Docker Compose非常方便。请参考以下文章以获取更详细的信息。
環境変数でデータを渡すことの考察 | Docker で環境変数をホストからコンテナに渡す方法(ホスト OS 側からゲスト OS に渡す方法各種) @ Qiita
参考资料
dockerでコンテナが立ち上がらないときやってみること @ Qiita
相关文献
.dockerignore が効かない?
.dockerignoreが効かない?.gitignoreとは書き方が違うよ! @ Qiita
.gitignore と違うの?
[Git] .gitignoreの仕様詳解 @ Qiita
我想要读一读。
[Git] .gitignoreの仕様詳解 @ Qiita
.dockerignoreが効かない?.gitignoreとは書き方が違うよ! @ Qiita