2017-11-10 9 views
1

私はmysqlのやデータベースなどinfluxdbや絵のデータを示すためのgrafanaを使用するメインのカーネルアプリケーションがある場合で働いています。私はdocker-composeと個別のDockerfileを使用して、それぞれ別のコンテナを作成しています。コンテナ - 複数のコンテナ

フォルダ構造のようなある:

  • ドッカー-compose.yml
  • カーネル
    • をdockercompose Dockerfilekernel
    • app.war
  • SQLDB
    • Dockerfilesqldb
    • dump.sql
    • startup.sh
  • grafana
    • Dockerfilegrafana
    • grafana.env
    • run.sh
  • tsdbdb
    • Dockerfiletsdb
    • influxdb.env
    • init-influxdb.sh
    • entrypoint.sh

カーネルのコンテナはなく、上のビルドログをチェックし、ログを表示しているtsdbdbコンテナのログをチェックするときに表示されるものと同じ、influxdb。 docker-composeため

コード:カーネルの

version: '3' 
services: 
    mysqldb: 
     build: 
      context: ./sqldb 
      dockerfile: Dockerfilesqldb 
     container_name: sql 
     command: mysqld --user=root --verbose 
     volumes: 
     - ./sqldb:/app/sql 
     restart: always 
     expose: 
     - "3306" 
     ports: 
     - "3306:3306" 
     environment: 
     - MYSQL_ROOT_PASSWORD=secretpassword 
     - MYSQL_DATABASE=dbtest 
     - MYSQL_USER=user 
     - MYSQL_PASSWORD=password 
     - MYSQL_ALLOW_EMPTY_PASSWORD=yes 
    tsdbdb: 
     build: 
      context: ./tsdbdb 
      dockerfile: Dockerfiletsdb 
     container_name: influx 
     restart: always 
     expose: 
     - "8083" 
     - "8086" 
     ports: 
     - "8083:8083" 
     - "8086:8086" 
     volumes: 
     - ./tsdb:/app/tsdb 
     env_file: 
     - './tsdbdb/influxdb.env' 
    grafana: 
     build: 
      context: ./grafana 
      dockerfile: Dockerfilegrafana 
     container_name: grafana 
     env_file: 
     - './grafana/grafana.env' 
     expose: 
     - "3000" 
     ports: 
     - "3003:3000" 
     links: 
     - tsdbdb 
    web: 
     build: 
      context: ./kernel 
      dockerfile: Dockerfilekernel 
     container_name: kernel 
     restart: always 
     expose: 
     - "8080" 
     ports: 
     - "8082:8080" 
     depends_on: 
     - mysqldb 
     links: 
     - tsdbdb 
     - mysqldb 
     volumes: 
     - ./kernel:/app/kernel 

Dockerfile

FROM java:openjdk-8-jre-alpine 

ENV JHIPSTER_SLEEP 0 

WORKDIR /app/kernel 

# add directly the war 
ADD *.war /app/kernel/app.war 

RUN sh -c 'touch /app/kernel/app.war' 
VOLUME /tmp 

EXPOSE 8080 

CMD echo "The application will start in ${JHIPSTER_SLEEP}s..." && \ 
    sleep ${JHIPSTER_SLEEP} && \ 
    java -Djava.security.egd=file:/dev/./urandom -jar /app/kernel/app.war 

Dockerfile influxdbため、中:

FROM buildpack-deps:stretch-curl 

WORKDIR /app/tsdb 

RUN set -ex && \ 
    for key in \ 
     05CE15085FC09D18E99EFB22684A14CF2582E0C5 ; \ 
    do \ 
     gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" || \ 
     gpg --keyserver pgp.mit.edu --recv-keys "$key" || \ 
     gpg --keyserver keyserver.pgp.com --recv-keys "$key" ; \ 
    done 

ENV INFLUXDB_VERSION 1.2.4 
ENV INFLUXDB_ADMIN_PASSWORD secretpassword 
ENV INFLUXDB_DB master_db 

RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" && \ 
    case "${dpkgArch##*-}" in \ 
     amd64) ARCH='amd64';; \ 
     arm64) ARCH='arm64';; \ 
     armhf) ARCH='armhf';; \ 
     armel) ARCH='armel';; \ 
     *)  echo "Unsupported architecture: ${dpkgArch}"; exit 1;; \ 
    esac && \ 
    wget -q https://dl.influxdata.com/influxdb/releases/influxdb_${INFLUXDB_VERSION}_${ARCH}.deb.asc && \ 
    wget -q https://dl.influxdata.com/influxdb/releases/influxdb_${INFLUXDB_VERSION}_${ARCH}.deb && \ 
    gpg --batch --verify influxdb_${INFLUXDB_VERSION}_${ARCH}.deb.asc influxdb_${INFLUXDB_VERSION}_${ARCH}.deb && \ 
    dpkg -i influxdb_${INFLUXDB_VERSION}_${ARCH}.deb && \ 
    rm -f influxdb_${INFLUXDB_VERSION}_${ARCH}.deb* 
COPY influxdb.conf /etc/influxdb/influxdb.conf 

EXPOSE 8086 

VOLUME /var/lib/influxdb 

COPY entrypoint.sh /entrypoint.sh 
COPY init-influxdb.sh /init-influxdb.sh 
ENTRYPOINT ["/entrypoint.sh"] 
CMD ["influxd"] 

これは愚かな間違いのために起こっている可能性がありますが、どこに問題があるのか​​正確にはわかりません。

+1

あなたの構造を間違えたことがないなら、 'Dockerfilesqldb'はあなたのdocker-composeファイルに従って' Dockerfilesql'という名前にする必要があります。 – Stefano

+1

申し訳ありませんが、入力エラーです。質問が編集されました。 – HardikT

+0

私は、すべてのドッカーファイルをdocker-compose.ymlが格納されているディレクトリに置いて、これを実行しました。 Dockerfile-dev、Dockerfile-phpなどがあります。これはあなたが取ることができるアプローチですが、ディレクトリp/serviceを持つことは良いことです。私はシンボリックリンクを試すのに十分な勇気はなかった。 – mikeyjk

答えて

0

は、だから私は、次の操作を行って問題を解決することができました -

ウェブにカーネルからサービス名を変更し、docker-compose.ymlに私は、カーネル・サービスのためのコマンド行を追加:

version: '3' 
services: 
    mysqldb: 
     build: 
      context: ./sqldb 
      dockerfile: Dockerfilesqldb 
     container_name: sql 
     command: mysqld --user=root --verbose 
     # volumes: 
     # - ./sqldb:/app/sql 
     restart: always 
     # expose: 
     # - "3306" 
     ports: 
     - "3306:3306" 
     environment: 
     - MYSQL_ROOT_PASSWORD=secretpassword 
     - MYSQL_DATABASE=dbtest 
     - MYSQL_USER=user 
     - MYSQL_PASSWORD=password 
     - MYSQL_ALLOW_EMPTY_PASSWORD=yes 
    tsdbdb: 
     build: 
      context: ./tsdbdb 
      dockerfile: Dockerfiletsdb 
     container_name: influx 
     restart: always 
     # expose: 
     # - "8083" 
     # - "8086" 
     ports: 
     - "8083:8083" 
     - "8086:8086" 
     # volumes: 
     # - ./tsdb:/app/tsdb 
     env_file: 
     - './tsdbdb/influxdb.env' 
    grafana: 
     build: 
      context: ./grafana 
      dockerfile: Dockerfilegrafana 
     container_name: grafana 
     env_file: 
     - './grafana/grafana.env' 
     expose: 
     - "3000" 
     ports: 
     - "3003:3000" 
     links: 
     - tsdbdb 
    kernel: 
     build: 
      context: ./kernel 
      dockerfile: Dockerfilekernel 
     container_name: kernel 
     command: java -Djava.security.egd=file:/dev/./urandom -jar /app/kernel/app.war 
     restart: always 
     # expose: 
     # - "8080" 
     ports: 
     - "8082:8080" 
     links: 
     - tsdbdb 
     - mysqldb 
     # volumes: 
     # - ./kernel:/app/kernel 

なぜコマンドを追加するだけで問題が解決するのか分かりませんが、

関連する問題