设置docker撰写开发

时间:2017-09-09 13:13:50

标签: docker docker-compose

我正在尝试创建一个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

有人能在这里发现问题吗?

2 个答案:

答案 0 :(得分:0)

问题是主机./web文件夹会影响内部/app文件夹。这意味着内部的任何内容都被您的主机文件夹所掩盖。所以你可以按照下面的方法进行操作

用于设置的附加bash脚本

<强> ./脚本/ 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 updocker-compose run有一个主要区别,即tty。运行时会分配一个tty,而不是。所以你需要将作曲改为

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