docker - 为什么 docker-compose up 似乎不同步卷

标签 docker docker-compose

这是我的 docker-compose.yml 的简化版本(buggy-service 中的音量与我预期的不一样):

version: '3.4'
services:

  local-db:
    image: postgres:9.6
    environment:
      - DB_NAME=${DB_NAME}
      # other env vars (not important)
    ports:
      - 5432:5432
    volumes:
      - ~/.docker-volumes/${DB_NAME}/postgresql/data:/var/lib/postgresql/data
      - postgresql:/docker-entrypoint-initdb.d

  buggy-service:
    build:
      context: .
      dockerfile: Dockerfile.test
      target: buggy-image
      args:
        # bunch of args (not important)
    volumes:
      - /Users/me/temp:/temp

volumes:

  postgresql:
    driver_opts:
      type: none
      device: /Users/me/postgresql
      o: bind

如果我这样做 docker-compose -f docker-compose.yml up -d local-db ,它的容器会自动启动,我发现 /Users/me/postgresql在主机 (Mac OSX) 上正确绑定(bind)到 /docker-entrypoint-initdb.d内容同步。

但是,如果我这样做 docker-compose -f docker-compose.yml up --build -d buggy-service ,容器不会自动启动。

问题:我如何获得 buggy-service表现得像 local-db ,即在安装所需卷的情况下自动启动?

这是 Dockerfile.test 的精简版被 buggy-service 引用:
FROM microsoft/dotnet:2.1-sdk-alpine AS buggy-image

# Bunch of ARG definitions (not important)

VOLUME /temp

# other stuff (not important)

ENTRYPOINT ["/bin/bash"]

# Other FROMs

编辑 1

关于我正在努力实现的目标的更多信息......

我正在尝试使用的 buggy-container 运行 .Net Core 作为基础镜像。它的目的是运行dotnet test并生成覆盖率报告,然后可以在主机中使用,主机可以是本地开发机器或构建服务器(在本例中为 BitBucket 管道)。

最佳答案

... followed by docker run -dit --name buggy-container buggy-image



此命令创建一个新容器,而不是基于 compose yml 文件中的任何内容。如果没有卷规范,它只会获得一个匿名卷,因为您已经在 Dockerfile 中定义了卷(我倾向于不建议在那里定义卷)。您可以使用 docker volume ls 查看匿名卷。命令,它们将是具有长唯一 id 且不引用它们所属的那些。

docker run 定义主机卷,您需要 -v旗帜:
docker run -dit -v /Users/me/temp:/temp --name buggy-container buggy-image

从您现在更改的问题来看,您有一个新问题。您的容器指定要在入口点运行的单个命令:
ENTRYPOINT ["/bin/bash"]

当 bash 运行时,它从标准输入读取输入。当该输入结束时,例如当您运行没有附加输入的容器时,bash 将退出。当您的容器运行的进程退出时,容器将退出。根据可用的详细信息,我无法告诉您该命令应该是什么,但一个好的起点是查看 docker hub 上执行您尝试运行的类似任务的其他图像,并查看他们的 Dockerfile使用(许多中心图像指向具有完整源代码的 GitHub 存储库)。

关于docker - 为什么 docker-compose up 似乎不同步卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55624175/

相关文章:

docker - 挂载卷而不删除文件

mysql - Docker-compose/init.sql无法正确执行

docker - 从docker-compose连接到不同堆栈上的服务

docker - 在 docker-compose.yml 中重用环境变量

mysql - 数据未添加到 MySQL 服务

python - 亚马逊云上的 Docker

docker - 如何确定所需的资源并设置在k8s pod中运行的应用程序的限制?

Azure 应用服务中的 MongoDB,通过 Docker-Compose

git - 如何在 kubernetes/openshift 的初始化容器参数中使用环境变量?

github - 在构建Dockerfile时,Docker在哪里知道从哪里提取.sh脚本?