docker compose的开发工作流:运行开发版本容器

docker compose的开发工作流:运行开发版本容器,docker,docker-compose,Docker,Docker Compose,我有一个非常典型的docker compose设置:直接从docker hub定制web容器和数据库容器。为了便于开发,我的主机目录被装载到web docker中,这样我就不必在每次做一个小的更改时重新构建容器。web服务器是一个乘客(独立)服务于ruby应用程序 当我运行它时,我的数据库正在运行,web服务正在运行(在端口3000上),一切正常。但是,如果我做了一个更改,则不会因为需要重新启动web服务器(乘客)而发生任何更改。我希望能够启动一个简单的轻量级开发服务器,例如thin,当我进行更

我有一个非常典型的docker compose设置:直接从docker hub定制web容器和数据库容器。为了便于开发,我的主机目录被装载到web docker中,这样我就不必在每次做一个小的更改时重新构建容器。web服务器是一个乘客(独立)服务于ruby应用程序

当我运行它时,我的数据库正在运行,web服务正在运行(在端口3000上),一切正常。但是,如果我做了一个更改,则不会因为需要重新启动web服务器(乘客)而发生任何更改。我希望能够启动一个简单的轻量级开发服务器,例如
thin
,当我进行更改时,可以手动重新启动该服务器

我尝试的是:

  • 启动新的web容器(
    docker compose run web…
    )不会为新容器公开任何端口。因此,我无法连接到web服务器
  • 直接使用Docker启动新的web容器(
    Docker运行web-p 5000:5000 image\u name…
    )。我们失去了docker compose功能,容器没有手动绑定就没有链接到数据库
  • 每次重新启动docker compose(因为它启动得很快)。每次我的数据库重新启动时都是空的,我需要继续运行
  • 使用
    --服务端口
    arg:端口3000已使用,请勿工作
  • docker exec
    web容器上的my dev服务器:必须在另一个端口上运行,因此不会公开
  • docker exec
    我的web服务器的
    kill
    :实际上它可以工作(它会重新启动),但我并不喜欢这个解决方案。首先,因为服务器仍然是乘客,所以我更喜欢轻量级web服务器(如
    )。其次,我发现使用
    docker exec…
    通过服务器连接kill不是很干净
  • 将我的
    Dockerfile
    更改为自动重新启动dev web服务器以替换Passenger:我希望
    Dockerfile
    与prod服务器、测试和开发上的相同

您是否有一个干净、简单的方法来启动我的web容器,打开端口5000,我将在其上启动/重新启动一个dev web服务器

我使用两个docker compose文件,一个用于开发,一个用于生产

在开发docker compose文件时,您可以使用
命令
覆盖docker文件中的
CMD
,这样您就可以轻松使用
bash
创建shell或使用自动重新启动服务器

要使用自定义docker compose文件,请执行:
docker compose-f dev.yml…

为此:

每次重新启动docker compose(因为它启动得很快)。每次我的数据库重新启动时都是空的,我需要继续运行


如果您使用docker compose-no deps web,它将不会重新启动数据库

我刚刚将所有源代码移动到一个数据容器中,该容器使用SMB导出给开发人员。我写DockerShell就是为了这个目的-,你是说你运行一个DockerCompose和一个数据库,还有一些刚刚启动bash的开发服务器?你能举个例子吗?我正在寻求在服务器不运行的情况下启动mongo、elasticsearch和dev服务器(运行后只需猛击它)