programing

도커 + Laravel + Mariaadb를 다음을 방지하도록 구성하는 문제:SQLSTATE[HY000] [2002] 잘못된 인수

newsource 2023. 9. 7. 21:43

도커 + Laravel + Mariaadb를 다음을 방지하도록 구성하는 문제:SQLSTATE[HY000] [2002] 잘못된 인수

저는 도커 컨테이너 내에서 실행되도록 래라벨 어플리케이션을 구성하는 중입니다; 저는 php7.4-apache 도커 이미지 위에 래라벨 측면을 성공적으로 구성했고, db를 위해 mariadb10.3 이미지를 별도로 구성했습니다.여러 연결 문제를 해결했지만 결국 다음 오류로 귀결되었습니다.

SQLSTATE[HY000] [2002] Invalid argument (SQL: select * from information_schema.tables where table_schema = laravel_db and table_name = migrations and table_type = 'BASE TABLE')

위의 특정 오류 인스턴스는 ppartisan migration을 실행할 때 나타나지만, 저는 ppartisan tinker를 사용하고 제가 확인한 테이블에 대한 기본 쿼리를 시도할 때와 제 laravel 앱을 통해 쿼리를 실행할 때(테스트 서버의 사이트를 방문하여 트리거됨) 같은 두 곳에서도 동일한 오류가 나타납니다.다음과 같은 오류가 반복됩니다.

\DB::table('users')->get();
Illuminate/Database/QueryException with message 'SQLSTATE[HY000] [2002] Invalid argument (SQL: select * from `users`)'

그리고 도커 로그에서:

PDOException(code: 2002): SQLSTATE[HY000] [2002] Invalid argument at /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

SO를 통해 이 특정 오류에 대한 정보는 SO#1 SO#2라는 두 게시물에서 찾을 수 있습니다.

둘 다 "TCP/IP(1)를 지정하거나 MySQL에 유닉스 소켓 위치(2)를 알려줘야 한다"고 명시하지만, 저는 도커를 사용하고 있으며 .env 파일에 표시된 도커 컨테이너 이름을 통해 db를 참조하고 있습니다.

DB_CONNECTION=mysql
DB_HOST=db
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=<MY_PASSWORD>
DB_HOST=3333

그래서 제 질문은 이것입니다: 도커를 사용하는 동안오류를 어떻게 우회할 수 있을까요?.env 파일의 docker container를 참조해야 docker 쪽에서 작업이 가능하기 때문에 SO에서 건의한 사항을 이행할 수 없습니다.또한 SO 외부에서 광범위하게 검색했지만(오류 문서를 위해 Mariaadb 문서를 살펴보고 광범위하게 구글링) 아무 소용이 없었습니다.

필요할 경우를 대비해 도커로 작성한 파일이 여기 있습니다.

version: "2.2"
services:
 app:
  image: php:7.4-apache
  ports:
   - "8060:80"
  tty: true
  restart: unless-stopped
  working_dir: /var/www/html
  container_name: app
  build:
   context: .
   dockerfile: app_dockerfile
  networks:
   - app-network

 db:
  image: mariadb:10.3
  container_name: db
  restart: unless-stopped
  tty: true
  environment:
   MYSQL_ROOT_PASSWORD: <MY_PASSWORD>
   MYSQL_DATABASE: laravel_db
   SERVICE_TAGS: dev
   SERVICE_NAME: mysql
  networks:
   - app-network
  volumes:
   - dbdata:/var/lib/mysql/docker_db/
  build:
   context: .
   dockerfile: db_dockerfile
  ports:
   - "3333:3306"
networks:
 app-network:
  driver: bridge

volumes:
 dbdata:
  driver: local

여러분 감사합니다, 정말 감사합니다.

.env 파일의 호스트가 잘못되었을 수도 있습니까?table plus 등의 클라이언트를 통해 데이터베이스에 연결해 본 적이 있습니까?

언급URL : https://stackoverflow.com/questions/64015832/issue-configuring-docker-laravel-mariadb-to-avoid-sqlstatehy000-2002-in