Eve*_*ews 5 docker docker-compose
我完全按照编写的方式完成了Docker Compose的初始概述,并且在boot2docker本地工作正常.但是,如果我尝试docker-compose up
在远程主机上执行操作,则不会将代码添加到远程容器中.
重现:
docker-machine create --driver my-favourite-cloud composetest
eval "$(docker-machine env composetest)"
docker-compose up
原始代码.
composetest $ docker-compose up
Redis运行正常,但Flask应用程序没有.
composetest $ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
794c90928b97 composetest_web "/bin/sh -c 'python About a minute ago Exited (2) About a minute ago composetest_web_1
2c70bd687dfc redis "/entrypoint.sh redi About a minute ago Up About a minute 6379/tcp composetest_redis_1
Run Code Online (Sandbox Code Playgroud)
什么地方出了错?
composetest $ docker logs 794c90928b97
python: can't open file 'app.py': [Errno 2] No such file or directory
Run Code Online (Sandbox Code Playgroud)
我们可以证实吗?
composetest $ docker-compose run -d web sleep 60
Starting composetest_redis_1...
composetest_web_run_3
composetest $ docker exec -it a4 /bin/bash
root@a4a73c6dd159:/code# ls -a
. ..
Run Code Online (Sandbox Code Playgroud)
空空如也.我们能解决吗?
评论卷 docker-compose.yml
web:
build: .
ports:
- "5000:5000"
# volumes:
# - .:/code
links:
- redis
redis:
image: redis
Run Code Online (Sandbox Code Playgroud)
然后就行docker-compose up
了!
让我们再试一次boot2docker.
composetest $ eval "$(boot2docker shellinit)"
composetest $ docker-compose up
Recreating composetest_redis_1...
Recreating composetest_web_1...
Attaching to composetest_redis_1, composetest_web_1
...
Run Code Online (Sandbox Code Playgroud)
Flask应用程序确实有效,但它有一个严重的问题.如果更改app.py,则Flask dev服务器不会重新加载,并且不会自动看到这些更改.即使您docker-compose up
再次停止容器,仍然看不到更改.我意识到我们失去了这个基本功能,因为不再安装音量.但是没有安装卷是我能够使用docker-compose与远程主机一起工作的唯一方法.我们应该能够让本地和远程主机使用相同的docker-compose.yml
和Dockerfile
.
如何与本地VM交互式开发并部署到远程VM而无需更改Dockerfile或docker-compose.yml?
版本:
Compose与您在常规命令行界面下可以做的几乎完全相同.所以你的命令大致相当于:
$ docker run --name web -p 5000:5000 -v $(pwd):/code --link redis:redis web
Run Code Online (Sandbox Code Playgroud)
问题是卷是相对于docker主机而不是客户端.因此它将工作目录挂载在远程VM上,而不是客户端上.在您的情况下,此目录为空.
如果要与远程VM进行交互式开发,则必须检查源并编辑VM上的文件.
更新:您似乎确实希望在本地开发和测试,然后将生产版本部署到远程VM.(如果我仍然误解,请道歉).为此,我建议您在开发本地卷时使用单独的Compose文件进行开发,然后重建并部署映像以进行生产.通过重建图像,它将获取最新版本的代码.在生产中安装卷会中断,因为您已使用空目录隐藏了映像中的代码.
值得指出的是,Docker目前还没有建议在生产中使用Compose.
我真正要寻找的是在生产文档中使用 Compose中找到的。通过在 Compose 中扩展服务,您可以与本地虚拟机进行交互开发并部署到远程虚拟机,而无需更改 Dockerfile 或 docker-compose.yml。
归档时间: |
|
查看次数: |
2906 次 |
最近记录: |