设置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 updocker-compose run有一个主要的区别是tty 。 运行时分配一个tty而不是。 所以你需要改变组成

 version: "2" services: web: build: web image: web volumes: - ./web:/app tty: true