2

構成を投稿する前に、何をアーカイブしたいのか、何を言及したいのかを説明しようとします。

パスの会話を簡単にするために、「Docker me up!」というプロジェクトについて話すとしましょう。にありX:\docker-projects\docker-me-up\ます。

ゴール:

コンテンツが異なる複数の nginx プロジェクトを実行したいと思います。各プロジェクトは専用のビルドを表します。開発中 [ docker-compose up -d] コンテナーは即座に更新される必要があります。これは正常に動作します。

トリッキーな部分は、npm [ http://gruntjs.com]をホストからコンテナー/イメージに直接外部委託することです。これにより、docker をインストールするだけで、どこにいてもデバッグと開発を行うことができます。したがって、npm を「サービス」にインストールし、ウォッチャーを初期化する必要があります。

各プロジェクトは、docker のホスト/ビルド上の独自のフォルダーにカプセル化されており、それ自体以外の知識を持ってはいけません。

私の解決策:

「volumes_from」などを使用してさまざまなバージョンを試しましたが、縮小されていますが完全な状態であるため、これを表示することにしました。

Docker-compose.yml

version: '2'
services:
    web:
        image: nginx
        volumes:
            - ./assets:/website/assets:ro
            - ./config:/website/config:ro
            - ./www:/website/www:ro
        links:
            - php
    php:
        image: php:fpm
        ports:
            - "9000:9000"
        volumes:
            - ./assets:/website/assets:ro
            - ./config:/website/config:ro
            - ./www:/website/www:ro
    app:
        build: .
        volumes:
            - ./assets:/website/assets
            - ./config:/website/config:ro
            - ./www:/website/www

Dockerfile

FROM debian:jessie-slim
RUN apt-get update && apt-get install -y \
    npm

RUN gem update --system
RUN npm install -g grunt-cli grunt-contrib-watch grunt-babel babel-preset-es2015

RUN mkdir -p /website/{assets,assets/es6,config,www,www/js,www/css}

VOLUME /website

WORKDIR /website

問題:

ご覧のとおり、「data」サービスにはnpmが含まれており、npm コマンドを実行できるはずです。しかし、実行するとdocker-compose up -dすべてが機能します。ページのコンテンツを編集したり、操作したりできますが、データ コンテナーが実行されていないため、npm コマンドを実行できません。大きな論理エラーがない限り。これはかなり可能です;-)

環境:

  • Windows 10 プロ [up2date]
  • docker の共有ドライブを使用
  • Docker バージョン 1.12.3、ビルド 6b644ec
  • docker-machine バージョン 0.8.2、ビルド e18a919
  • docker-compose バージョン 1.8.1、ビルド 004ddae
4

1 に答える 1

1

を呼び出した後、次の方法でコンテナーdocker-compose upのインタラクティブ シェルを取得できます。app

docker-compose run app

次のコマンドを使用して、1 回限りのコマンドを実行することもできます。

docker-compose run app [command]

完了app後にコンテナーが実行されない理由は、サービスが定義されていないためです。サービスとして実行するには、次のようなものを追加して、コンテナーのフォアグラウンドでスレッドを実行し続ける必要があります。docker-compose upDockerfileapp

CMD ./run-my-service

Dockerfile の最後まで。

于 2016-11-20T05:44:26.383 に答える