Docker 为 Rails 作曲
Docker Compose for Rails
我正在尝试在 docker-compose.yml 文件
中复制此 docker 命令
docker run --name rails -d -p 80:3000 -v "$PWD"/app:/www -w /www -ti rails
我的docker-compose.yml文件:
rails:
image: rails
container_name: rails
ports:
- 80:3000
volumes:
- ./app:/wwww
当我执行 docker-compose up -d 时,容器已创建,但没有分层。
当我将 tty: true 添加到我的 docker docker-compose.yml 文件,容器启动良好,但我的卷未安装。
如何在 docker-compose.yml 中精确地复制我的 docker 命令?
有一些方法可以解决您的问题。
解决方法一:如果你想在你的docker-compose.yml中使用rails
图片,你需要设置命令和它的工作目录,如
rails:
image: rails
container_name: rails
command: bash -c "bundle install && rails server -b 0.0.0.0"
ports:
- 80:3000
volumes:
- ./app:/www
working_dir: /www
这将在您每次 运行 docker-compose up
.
时从 rails 图像创建一个新容器
解决方法二:将你的docker-compose.yml移动到与Gemfile相同的目录下,并在该目录下按顺序创建Dockerfile
提前构建一个docker容器(避免每次运行宁bundle install
)
#Dockerfile
FROM rails:onbuild
我这里使用rails:onbuild
是为了简单起见(关于rails:onbuild
和[=19=的区别,请看documentation)。
之后,将docker-compose.yml修改为
rails:
build: .
container_name: rails
ports:
- 80:3000
volumes:
- .:/www
working_dir: /www
运行 docker-compose up
这应该可行!
如果您修改了 Gemfile,您可能还需要在 运行docker-compose up
.
之前通过 docker-compose build
重建您的容器
感谢您的回答。它帮助我找到了解决方案。
其实是音量的问题。我想用目录 /www 挂载卷。但这是不可能的。
所以我使用了 rails 图片默认使用的目录:
/usr/src/app
rails:
image: rails
container_name: rails
ports:
- 80:3000
working_dir: /usr/src/app
volumes:
- ./app:/usr/src/app
tty: true
现在我的 docker-compose up -d 命令可以工作了
我正在尝试在 docker-compose.yml 文件
中复制此 docker 命令docker run --name rails -d -p 80:3000 -v "$PWD"/app:/www -w /www -ti rails
我的docker-compose.yml文件:
rails:
image: rails
container_name: rails
ports:
- 80:3000
volumes:
- ./app:/wwww
当我执行 docker-compose up -d 时,容器已创建,但没有分层。
当我将 tty: true 添加到我的 docker docker-compose.yml 文件,容器启动良好,但我的卷未安装。
如何在 docker-compose.yml 中精确地复制我的 docker 命令?
有一些方法可以解决您的问题。
解决方法一:如果你想在你的docker-compose.yml中使用rails
图片,你需要设置命令和它的工作目录,如
rails:
image: rails
container_name: rails
command: bash -c "bundle install && rails server -b 0.0.0.0"
ports:
- 80:3000
volumes:
- ./app:/www
working_dir: /www
这将在您每次 运行 docker-compose up
.
解决方法二:将你的docker-compose.yml移动到与Gemfile相同的目录下,并在该目录下按顺序创建Dockerfile
提前构建一个docker容器(避免每次运行宁bundle install
)
#Dockerfile
FROM rails:onbuild
我这里使用rails:onbuild
是为了简单起见(关于rails:onbuild
和[=19=的区别,请看documentation)。
之后,将docker-compose.yml修改为
rails:
build: .
container_name: rails
ports:
- 80:3000
volumes:
- .:/www
working_dir: /www
运行 docker-compose up
这应该可行!
如果您修改了 Gemfile,您可能还需要在 运行docker-compose up
.
docker-compose build
重建您的容器
感谢您的回答。它帮助我找到了解决方案。
其实是音量的问题。我想用目录 /www 挂载卷。但这是不可能的。 所以我使用了 rails 图片默认使用的目录: /usr/src/app
rails:
image: rails
container_name: rails
ports:
- 80:3000
working_dir: /usr/src/app
volumes:
- ./app:/usr/src/app
tty: true
现在我的 docker-compose up -d 命令可以工作了