我有一个docker-compose设置,用于启动Rails Web应用程序和PostgreSQL数据库容器。
两个服务都启动了,但我需要在Web应用程序容器(service =“web”)中运行db:seed和db:migrate。
我试着这样做:
docker-compose exec web rails db:seed
但它告诉我:
ERROR: No container found for web_1
当我尝试使用docker:
docker exec <container-id> rails db:seed
Docker确实尝试在容器中执行该命令,但它显然失败了,因为docker不知道PostgreSQL容器并且无法连接到它以执行种子命令。
这似乎只是Docker for Mac中的一个问题。在Ubuntu中一切正常。
我使用的是版本1.8.0的docker-compose和1.12.1的docker。
答案 0 :(得分:1)
执行docker-compose run
时,它会为正在运行的容器生成随机唯一名称,您必须在使用exec时指定该名称。
$ docker-compose run bot
...
在另一个终端:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
306bd1381f81 rroemhild/errbot "/app/venv/bin/run.sh" 13 seconds ago Up 11 seconds 3141-3142/tcp err_bot_run_31
$ docker exec bot whoami
Error response from daemon: No such container: bot
$ docker exec err_bot_run_31 whoami
err
答案 1 :(得分:1)
我有2个终端正在运行。在第一次,我跑了
docker-compose up
提出我的服务。
第二次,我跑了:
docker-compose exec web rails db:seed
在我的网络容器中执行rails命令。
这就是事情:在第二个终端中,您必须与docker-compose.yml文件位于同一目录中。您不能从任何地方运行docker-compose命令。
当我更改到第二个终端中的正确目录时,exec命令工作正常。