2017-08-02 13 views
1

私は、実稼働環境の共有ホスティングでホストされているWebサイトを持っています。ウェブサイトはコード内のlocalhostを介してデータベースに接続します。私のドッカーの作成では、私はphp:5.6-apachemysql:5.6インスタンスを持っています。Docker-compose port forwarding

docker-composeに、Webコンテナポートのポート3306をdbコンテナの3306に転送するように指示することはありますか。そのため、Webコンテナが3306のlocalhostに接続するとき3306でdbに送信されます。ウェブコンテナのポート80を外部に共有しますか?

現在のドッキングウィンドウ-compose.yml:

version: "3" 

services: 
    web: 
    build: . 
    #image: php:5.6-apache 
    ports: 
    - "8080:80" 
    environment: 
    - "APP_LOG=php://stderr" 
    - "LOG_LEVEL=debug" 
    volumes: 
    - .:/var/www/html 
    network_mode: service:db # See https://stackoverflow.com/a/45458460/95195 
# networks: 
#  - internal 
    working_dir: /var/www 
    db: 
    image: mysql:5.6 
    ports: 
    - "3306:3306" 
    environment: 
     - "MYSQL_XXXXX=*****" 
    volumes: 
     - ./provision/mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d 
# networks: 
#  - internal 

networks: 
    internal: 
    driver: bridge 

現在のエラー:

ERROR: for web Cannot create container for service web: conflicting options: port publishing and the container type network mode

答えて

2

はいそれは可能です。 network_modeオプションを使用する必要があります。たとえば、以下の

version: '2' 

services: 
    db: 
    image: mysql 
    environment: 
     MYSQL_ROOT_PASSWORD: root 
    ports: 
     - "80:80" 
     - "3306:3306" 
    app: 
    image: ubuntu:16.04 
    command: bash -c "apt update && apt install -y telnet && sleep 10 && telnet localhost 3306" 
    network_mode: service:db 

出力を参照してください

app_1 | Trying 127.0.0.1... 
app_1 | Connected to localhost. 
app_1 | Escape character is '^]'. 
app_1 | Connection closed by foreign host. 

network_mode: service:dbappサービスそれ自身のプライベートネットワークを割り当てないためにドッキングウィンドウを指示します。代わりにdbサービスのネットワークに参加させてください。したがって、ポートマッピングはすべてdbサービス自体で行う必要があります。

私は通常それを使用する方法が異なります、私は無限ループを実行するbaseサービスを作成し、dbappサービスは両方とも基本サービスネットワーク上で起動されます。すべてのポートマッピングは基本サービスで行う必要があります。

+0

フラグはポートと互換性がないようです。私はそれをしたいだけでなく、ウェブコンテナポート80を世界にアクセス可能にしてもらいたい。私はnetwork_mode:サービスがどのようにドキュメントから行うのかを正確に理解することができません。 –

+0

ポートに関する詳細を更新しました。アップレートを参照してください –