2017-05-16 8 views
1

私は春のブートWebアプリケーションをデータベースコンテナに接続しようとします。 そして私はウェブからdbコンテナにpingできます。しかし、Webは公開された3307ポートによってdbに接続できません。しかし、私は内部コンテナポート3306によってdbに接続できます。非常に簡単なプロジェクトです。何が間違っているのでしょうか?ドッカーが作成します。ネットワーク。春のブートとMySQLの接続

これは私のドッキングウィンドウ-compose.ymlである:それは十分に簡単です

version: '3' 
services: 
    db: 
    build: 
     context: ./db 
     dockerfile: Dockerfile 
    image: db 
    ports: 
     - "3307:3306" 
    volumes: 
     - demo_volume:/var/lib/mysql 
    networks: 
     - my-backend 

    web: 
    build: 
     context: ./web 
     dockerfile: Dockerfile 
    image: web 
    depends_on: 
     - db 
    ports: 
     - "18080:8080" 
    networks: 
     - my-backend 
    environment: 
     - DATABASE_HOST=db 
     - DATABASE_USER=user 
     - DATABASE_PASSWORD=password 
     - DATABASE_NAME=demo 
     - DATABASE_PORT=3307 
     - SPRING_PROFILES_ACTIVE=container 
     - DEBUG=true 

volumes: 
    demo_volume: 
    driver: local 

networks: 
    my-backend: 
    driver: bridge 

アクティブなプロファイルのための私のapplication.yml - コンテナDockerfileデシベル

spring: 
    profiles: 
    container 
    datasource: 
    url: jdbc:mysql://${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME}?characterEncoding=UTF-8 
    username: ${DATABASE_USER} 
    password: ${DATABASE_PASSWORD} 
    driver-class-name: com.mysql.jdbc.Driver 
    jpa: 
    database-platform: org.hibernate.dialect.MySQLDialect 

また、非常にシンプルな

FROM mysql:5.7 

ENV MYSQL_ROOT_PASSWORD=admin 
ENV MYSQL_DATABASE=demo 
ENV MYSQL_USER=user 
ENV MYSQL_PASSWORD=password 

ADD dump.sql /docker-entrypoint-initdb.d/ 

そしてウェブDockerfile

FROM java:8-jre 
COPY ./web.jar /app/web.jar 
CMD ["java", "-jar", "/app/web.jar"] 
CMD ["java", "-Xmx200m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/web.jar"] 
+0

** dcokerバージョン** 'クライアント: バージョン:17.03.1-CE APIのバージョン:1.27 囲碁バージョン:Gitはコミットgo1.7.5 :内蔵c6d412e :火3月28日00 :40:02 2017 OS /アーチ:ダーウィン/ AMD64 サーバー: バージョン:17.03.1-CE APIバージョン:1.27(最小バージョン1.12) 囲碁バージョン:Gitはコミットgo1.7.5 :c6d412e 内蔵: Fri Mar 24 00:00:50 2017 OS/Arch:linux/amd64 実験:true ' –

+0

' iptables -t nat -L -n'の出力は何ですか? –

+0

@AlexKarshin iptables:コマンドが見つかりません –

答えて

0

コンテナをリンクして機能させる必要があります。

web: 
build: 
    context: ./web 
    dockerfile: Dockerfile 
image: web 
depends_on: 
    - db 
ports: 
    - "18080:8080" 
networks: 
    - my-backend 
environment: 
    - DATABASE_HOST=db 
    - DATABASE_USER=user 
    - DATABASE_PASSWORD=password 
    - DATABASE_NAME=demo 
    - DATABASE_PORT=3307 
    - SPRING_PROFILES_ACTIVE=container 
    - DEBUG=true 
links: 
    - db 

今すぐあなたのウェブ容器内部の/ etc/hostsドッカーのドキュメントについては、DBコンテナ

+0

すみませんが、私はすべきではありません。 ** link **は推奨されていません –

0

のエントリを持つ必要があり、同じブリッジネットワーク(ユーザー定義の)内のすべてのコンテナは、内部ポートを介して通信を行います。画像で説明されていますisolated_bridge_network

あなたのコンテナが外部ネットワークから利用できるようにするには、ポートを公開する必要があります。公開 - 内部ポートを外部環境にマッピングする必要があることを意味します。画像で見る published_ports_from_isolated_bridge_network

関連する問題