设置docker组成开发
我正在尝试创build一个docker-compose.yml
,这将允许我启动一些服务,其中一些服务将拥有自己的Dockerfile
。 例如:
- my-project - docker-compose.yml - web - Dockerfile - src/ - worker - Dockerfile - src/
我希望开发人员能够检出项目并运行docker-compose up --build
来开始。
另外,我正在尝试在Docker容器中装入一个服务的源代码,以便开发人员能够编辑主机上的文件,这些更改将立即反映在容器中(比如说它是一个rails应用程序,将在文件更改时重新编译)。
我试图让web
服务正在进行,但我不能在容器中安装web
目录: https : //github.com/zoran119/haskell-webservice
这里是docker-compose.yml
:
version: "2" services: web: build: web image: web volumes: - ./web:/app
任何人都可以在这里发现问题?
问题是主机./web
文件夹阴影内部/app
文件夹。 这意味着里面的东西被你的主机文件夹所掩盖。 所以你可以按照下面的方法
额外的设置bash脚本
./scripts/deploy_app.sh
#!/bin/bash set -ex # By default checkout the master branch, if none specified BRANCH=${BRANCH:-master} cd /usr/src/app git clone https://github.com/tarunlalwani/docker-nodejs-sample-app . git checkout $BRANCH # Install app dependencies npm install
./scripts/run_app.sh
#!/bin/bash set -ex cd /usr/src/app exec npm start
Dockerfile
FROM node:boron # Create app directory RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY ./scripts /scripts EXPOSE 8080 CMD [ "bash", "-c" , "/scripts/deploy_app.sh && /scripts/run_app.sh"]
现在在你的docker-compose中,你可以在下面使用
version: '3' services: app: build: context: . volumes: - ./app:/usr/src/app
现在,当您执行docker-compose up
,它将运行/scripts/deploy_app.sh
并将该应用程序部署到容器内的/usr/src/app
。 主文件夹./app
将有开发人员编辑的源代码。
如果文件夹已经有数据,您可以增强脚本不要下载源代码。 代码的分支可以使用BRANCH
环境variables进行控制。 如果你想要的话,你甚至可以在Dockerfile中运行这个脚本,以使默认的图像包含源代码
看到我写的关于静态和dynamic代码部署的详细文章
http://tarunlalwani.com/post/deploying-code-inside-docker-images-statically-dynamically/
所以看来你的问题变成了不一样的东西
当我尝试docker-compose up
我得到以下错误
Attaching to hask_web_1 web_1 | Version 1.3.2, Git revision 3f675146590da4f3edf768b89355f798229da2a5 (4395 commits) x86_64 hpack-0.15.0 web_1 | 2017-09-10 09:58:04.741696: [debug] Checking for project config at: /app/stack.yaml web_1 | @(Stack/Config.hs:863:9) web_1 | 2017-09-10 09:58:04.741873: [debug] Loading project config file stack.yaml web_1 | @(Stack/Config.hs:881:13) web_1 | <stdin>: hGetLine: end of file hask_web_1 exited with code 1
但是,当我使用docker-compose run web
我得到以下输出
$ docker-compose run web Version 1.3.2, Git revision 3f675146590da4f3edf768b89355f798229da2a5 (4395 commits) x86_64 hpack-0.15.0 2017-09-10 09:58:37.859351: [debug] Checking for project config at: /app/stack.yaml @(Stack/Config.hs:863:9) 2017-09-10 09:58:37.859580: [debug] Loading project config file stack.yaml @(Stack/Config.hs:881:13) 2017-09-10 09:58:37.862281: [debug] Trying to decode /root/.stack/build-plan-cache/x86_64-linux/lts-9.3.cache
所以这让我意识到你的问题。 docker-compose up
和docker-compose run
有一个主要的区别是tty
。 运行时分配一个tty而不是。 所以你需要改变组成
version: "2" services: web: build: web image: web volumes: - ./web:/app tty: true