質問: 'mgsvpass'|" lib/settings.php \ && sed -i.bak "s|cas-qshare.cas.unt.edu|localhost|" lib/settings.php run cp /var/www/html/mgsv/arial.ttf /usr/share/fonts/truetype/ run cd /var/www/html/mgsv/ws \ && tar -xzf mgsv-ws-server.tar.gz run cd /var/www/html/mgsv/ws/mgsv-ws-server \ && mvn package run cp -f /var/www/html/mgsv/ws/mgsv-ws-server/target/ws-server-1.0rc1-jar-with-dependencies.jar /var/www/html/mgsv/ws/ run cd /var/www/html/mgsv/ws \ && echo "mgsv_upload_url=http://localhost/mgsv" > config.properties \ && echo "ws_publish_url=http\://localhost\:8081/mgsvservice" >> config.properties \ && java -jar ws-server-1.0rc1-jar-with-dependencies.jar & copy ./index.php /var/www/html/ run a2enmod rewrite http://localhost:8080/を使用すると、これは私が得た出力です:hello world! warning: mysqli_connect(): (hy000/2002): no such file or directory in /var/www/html/index.php on line 4 failed to connect to mysql: no such file or directory 私は何を取りこぼしたか?前もって感謝します。
回答: ここでの問題は、localhostがデータベースホストではないことです。 phpスクリプトが "www" dockerコンテナで実行されている場合、localhostには待機中のmysqlサーバーがない可能性があります。iirc、mysqliからの "file not found"エラーlocalhostでmysqlソケットが見つからないことが原因です。「db」イメージのポートが公開されていることもわかりません。そのため、「www」がデータベースに接続する方法がわからないのですがその中で走っています。"db" dockerコンテナーへのアドレスと、それがリッスンしているポートを見つけ、mysqli_connect()関数でそれを参照する必要があります。最近のバージョンのdockerを使用している場合、より簡単な方法は、コンテナーを同じdockerネットワークに追加し、名前で参照することです。編集:dockerネットワーキングネットワーキング機能 公式ドキュメント内 は非常に役立つため、よく読んでください。おそらく次のdocker-compose.ymlを使用できます(テストされていません)。version: '3.1' services: db: image: mysql restart: always environment: - mysql_database=mgsv - mysql_user=mgsv_user - mysql_password=mgsvpass - mysql_root_password=mysql123 volumes: - ./mysql:/docker-entrypoint-initdb.d networks: - web-db-net www: build: ./mgsv restart: always ports: - 8080:80 networks: - web-db-net networks: web-db-net: 次に、接続線を変更して、名前でdbコンテナーを参照します(mysqlのデフォルトである3306を使用しない場合は、ポートも指定する必要があります)。$con = mysqli_connect("db","mgsv_user","mgsvpass","mgsv"); edit2:ネットワークが実際に機能するようにdocker-compose.ymlを修正