我正在尝试创建一个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
有人能在这里发现问题吗?
答案 0 :(得分:0)
问题是主机./web
文件夹会影响内部/app
文件夹。这意味着内部的任何内容都被您的主机文件夹所掩盖。所以你可以按照下面的方法进行操作
<强> ./脚本/ 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
<强> ./脚本/ 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
环境变量来控制代码的分支。如果你愿意,你甚至可以在Dockerfile中运行脚本,以获得默认包含源
请参阅我撰写的有关静态和动态代码部署的详细文章
http://tarunlalwani.com/post/deploying-code-inside-docker-images-statically-dynamically/
答案 1 :(得分:0)
所以看来你的问题变成了不同的东西
当我尝试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