0

ブリッジネットワークの下で3つのサービス(db、nginx、およびWebサービス)をリンクして、ローカルホストまたはコンテナ内のさまざまなサービスを突き止めて、 Webサービスの対話型端末。どうすればこれを達成できますか?Dockerを持つ端末

マイドッカ - コンの構成は以下の通りです:

Webサービスをベースとして mhart/alpine-node:6.7.0を使用して、さらにいくつかのユーティリティプラスPython3.5とフラスコを追加している
version: '2' 
services: 
    web: 
    build: 
     context: . 
     dockerfile: Dockerfile-alpine 
    command: /bin/bash 
    ports: 
     - "5000:5000" 
    volumes: 
     - $REPO_DIR:/repository 
    links: 
     - db 
     - nginx 
    nginx: 
    image: nginx:stable-alpine 
    ports: 
     - "8080:8080" 
    volumes: 
     - $NGINX_STATIC_DIR:/var/www/static 
     - $NGINX_CONFIG_FILE:/etc/nginx/nginx.conf 
    db: 
    image: mysql/mysql-server 
    ports: 
     - "3307:3306" 
    environment: 
     MYSQL_USER: $MYSQL_USER 
     MYSQL_PASSWORD: $MYSQL_PASSWORD 
     MYSQL_DATABASE: $MYSQL_DATABASE 
     MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD 
    volumes: 
     - $DB_DATA_DIR:/var/lib/mysql 
     - $DB_LOG_DIR:/var/log/mysql 

私がdocker-compose run webを実行すると、対話型端末にアクセスできますが、dbおよびnginxサービスは適切にブート/リンクされません。

さらに、nginxもdbも存在しないコンテナ内部のネットワークフォレンジックが表示されます。私はさらにdocker-compose upを使用して、ホストシステムにmysqlがインストールされていることを認められたdbサービスのポート競合を実際に作成したので、これをさらにサポートできます。docker-compose runで報告されませんでした。

私はdocker-compose upを試みる一方、私はより多くのアクティブ・トレー​​スを取得しますが、ない対話型端末:私は対話型端末と私の3つのコンテナの適切なリンクを達成するために何を

Starting courseadmin_nginx_1 
Recreating courseadmin_db_1 
Recreating courseadmin_web_1 
Attaching to courseadmin_nginx_1, courseadmin_db_1, courseadmin_web_1 
db_1  | Initializing database 
courseadmin_web_1 exited with code 0 
db_1  | Database initialized 
db_1  | MySQL init process in progress... 
db_1  | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it. 
db_1  | Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it. 
db_1  | mysql: [Warning] Using a password on the command line interface can be insecure. 
db_1  | mysql: [Warning] Using a password on the command line interface can be insecure. 
db_1  | mysql: [Warning] Using a password on the command line interface can be insecure. 
db_1  | mysql: [Warning] Using a password on the command line interface can be insecure. 
db_1  | 
db_1  | /entrypoint.sh: ignoring /docker-entrypoint-initdb.d/* 
db_1  | 
db_1  | 
db_1  | MySQL init process done. Ready for start up. 
db_1  | 

を行うことができます?

答えて

2

私は、私は完全にあなたの質問を理解し、完全に一定ではないので、私は私ができる一部答えることを試みる:

一見を、あなたのdocker-compose.ymlファイルが正常に見える、とdocker-compose upコマンドの正しいランニングは思わこれを確認する。ただし、version: '2'と指定します。バージョン2以降のdocker-compose文書からは、暗黙的にdocker-composeによってリンクが行われます(十分な評判がないためコメントにリンクを追加します)。これは、links:の部分を削除できることを意味します(これらのエイリアスを明示的に指定しない限り、この部分は無視できます)。私はV1とV2の違いを説明する偉大なリソースはthis(彼は投稿のステップ2でlinksをカバーしていた)だと思ったが、もちろんdocker-compose docsもチェックすることができる。残りについては

、私の提案:

  • docker-compose up -dは切り離さモードですべてを実行します。 Dockerの作成は、正しく構成されている限り、暗黙的なリンクを処理します。 docker-composeとのインターコンテナネットワーキングの詳細については、thisが私にとって大きなリソースでした。 docker-composeの本当のものは、そのページのセクション3.3から始まります。
  • すべてが稼働したら、docker ps -aは私が正しくリコール場合だけdocker exec -it $container_id bashを行い、「対話型端末」を起動するにはあなたのアクティブなコンテナ
  • が表示されます。これにより、そのコンテナ内の端末が起動します。 execは指定されたコンテナ内でコマンドを実行し、iフラグは 'interactive'ターミナルを開始し、tフラグはTTYレイヤを指定し、bashシェルのタイプを指定します。

私はあなたのweb構成でdepends_on:クラスを追加し、追加の勧告を追加することができれば。これにより、WebコンテナはSQLとNginxの両方が完全に起動するのを待ちます。これと同じように:https://docs.docker.com/compose/networking/#/links:

services: 
    web: 
    [...] 
    depends_on: 
     - nginx 
     - db 
+0

私が話し続ける 'ドッキングウィンドウ-compose'ドキュメントは、ここにlinks''について、具体的部分を見つけることができます – d00bsm3n

+0

素晴らしい投稿です!間違いなく私は進歩に多くの助けになります。しかし、私のウェブコンテナは、/ bin/bashが何もしていないので死んでしまうので、ドッカーexec -ti $ container_idを実行することはできません。エントリーポイントを通過せずに生き続ける方法はありますか? –

+1

**なぜあなたの 'web'コンテナが死んでいるのか明らかでない場合は、[here](http://stackoverflow.com/a/28214133/6942595)を参照してください。残りの部分については、あなたの 'web'サービスで何を達成しようとしているのか、あなたのOPでもう少し詳しく説明できますか?私にとっては単に 'image:alpine'を実行すれば、' exec'でシェルを起動できるコンテナを設定することができますか? – d00bsm3n