docker-compose up --build 和 docker-compose build && docker-compose up 有什么区别吗?

10
我们正在尝试在远程主机上构建和运行docker-compose项目。我尝试使用:
docker-compose -H 'ssh://remote_address' up --build

并获得

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

因此,我们尝试了:

docker-compose -H 'ssh://remote_address' build
docker-compose -H 'ssh://remote_address' up

这个方法很好用。我的问题是我在文档中找不到证据表明这是正确的行为。这是docker-compose的一个bug、特性还是我的环境出了问题?


1
我猜这可能是Compose中的一个错误,并将通过其GitHub存储库进行跟进(https://github.com/docker/compose)。 - David Maze
1个回答

10
我不确定你在第一条命令中遇到的错误,我的意思是 docker-compose -H 'ssh://ip' up --build 可能是一个错误,但这三个提到的命令肯定有区别。我会尝试以简单的方式解释一下:
  1. 第一条命令是 docker-compose up --build

此命令找到 docker-compose 文件并重新构建镜像,然后使其运行。假设您对 docker-compose 文件进行了一些更改,因此当您仅运行 docker-compose 时,您将收到一条警告,指出镜像未被重新构建,您应该运行 docker-compose up --build 重新构建它并使所有内容再次构建(尽管之前已经进行过某些操作,并且存在于缓存中)。

  1. 第二条命令是 docker-compose build

此命令仅基于 docker-compose 构建镜像,但不运行它。您可以通过 docker image lsdocker images 查看构建的镜像。执行 docker ps -a 也不会看到您最近构建的镜像正在运行。

  1. 第三个也是最后一个命令是 docker-compose up

如果此命令第一次输入,则尝试在存在的 Dockerfile 中运行所有内容并下载基础镜像等。然后制作镜像并运行容器。

如果镜像之前已经构建过,它只会运行它。

与第一条命令不同,第三条命令仅运行该镜像的最新构建版本,但不会重新构建它。


感谢您的解释,但我的问题在于-H标志的解释。似乎docker-compose up --build忽略了它,并尝试连接到默认的docker引擎unix:///var/run/docker.sock,而这在我的环境中不可用。 - Jakub Noga
我已经阅读了有关-H的Docker手册,似乎在主机服务器上(在您的情况下,是远程SSH服务器)应该运行套接字。如果我理解正确,您是否检查过远程服务器上是否正在运行Docker? - Saeed
1
正如我在问题中所写,远程Docker引擎正在运行,并且当我使用docker-compose -H 'ssh://remote_host' build && docker-compose -H 'ssh://remote_host' up而不是docker-compose -H 'ssh://remote_host' up --build时,一切都按预期工作。 - Jakub Noga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接