sourcecode

도커 컴포지트와 도커 실행을 사용한 결과 차이

copyscript 2023. 1. 30. 22:16
반응형

도커 컴포지트와 도커 실행을 사용한 결과 차이

다른 컨테이너와 링크할 수 있는 범용 공통 데이터베이스를 설정하고 있습니다.했을 때 다른 결과가 나타나다docker-compose ★★★★★★★★★★★★★★★★★」docker run.

docker-param.yml

mysql:
    image: mariadb:10.1
    ports:
        - 3306:3306
    environment:
        MYSQL_ROOT_PASSWORD: root-secret
        MYSQL_USER: dbuser
        MYSQL_PASSWORD: my-secret
    volumes:
        - ./conf:/etc/mysql/conf.d
        - ./data:/var/lib/mysql
        - ./logs:/var/log/mysql
pma:
    image: phpmyadmin/phpmyadmin
    links:
        - mysql:db
    ports:
        - 8088:80
    environment:
        MYSQL_ROOT_PASSWORD: root-secret
        MYSQL_USER: dbuser
        MYSQL_PASSWORD: my-secret

실행 중인 도커 명령어는 다음과 같습니다.

docker run -d -P --name mysql -v conf:/etc/mysql/conf.d -v data:/var/lib/mysql \
    -v logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=root-secret \
    -e MYSQL_USER=dbuser -e MYSQL_PASSWORD=my-secret -p 3306:3306 mariadb:10.1
docker run -d --name pma --link mysql:db  -e MYSQL_ROOT_PASSWORD=root-secret \
    -e MYSQL_USER=dbuser -e MYSQL_PASSWORD=my-secret -p 8088:80 phpmyadmin/phpmyadmin

「」를 사용하고 docker-compose up -d모든 것이 정상적으로 동작하며 호스트의 데이터 디렉토리가 데이터베이스 파일로 가득 차 있습니다.또한 phmyadmin은 문제없이 데이터베이스 컨테이너에 연결할 수 있습니다.

도커 명령을 사용하면 호스트의 데이터 디렉토리가 비어 있고 데이터가 컨테이너에 저장됩니다.phpmyadmin은 로그인을 시도할 때도 "액세스 거부"를 표시합니다.

docker-compose를 사용하지만 docker와 통신할 수 없는 경우 데이터 볼륨이 올바르게 마운트되고 phpmyadmin이 통신 가능한 이유를 말씀해 주시겠습니까?

다음 명령을 사용합니다.

docker run -d -P --name mysql \
  -v $(pwd)/conf:/etc/mysql/conf.d \
  -v $(pwd)/data:/var/lib/mysql \
  -v $(pwd)/logs:/var/log/mysql \
  -e MYSQL_ROOT_PASSWORD=root-secret \
  -e MYSQL_USER=dbuser \
  -e MYSQL_PASSWORD=my-secret \
  -p 3306:3306 \
  mariadb:10.1 

docker run -d --name pma \
  --link mysql:db  \
  -e MYSQL_ROOT_PASSWORD=root-secret \
  -e MYSQL_USER=dbuser \
  -e MYSQL_PASSWORD=my-secret \
  -p 8088:80 \
  phpmyadmin/phpmyadmin

이유

볼륨을 올바르게 마운트하고 있지 않습니다.서서 docker-compose.yml, 이 있는 경로

volumes:
    - ./conf:/etc/mysql/conf.d
    - ./data:/var/lib/mysql
    - ./logs:/var/log/mysql

서서 docker run상대

-v conf:/etc/mysql/conf.d -v data:/var/lib/mysql -v logs:/var/log/mysql

외에 '있다'도 있어요.docker run에서는 컨테이너 내에 마운트할 로컬디렉토리에 대한 절대 경로를 지정해야 합니다. 대신 '보다 낫다'와 합니다.docker-compose.yml 하다, 이렇게 요.pwd절대적인 길을 찾거나 손으로 길을 쓰거나 할 수작업으로.

-v /path/to/conf:/etc/mysql/conf.d \
-v /path/to/data:/var/lib/mysql \
-v path/to/logs:/var/log/mysql \

건배!

다른 사용자가 지적한 바와 같이 볼륨 경로를 지정하는 방법에 차이가 있습니다. 지금까지 이유를 . "는 식으로도 말이죠.볼륨을 "잘못" 지정했는데도docker run도커는 그것들을 오류 없이 받아들였고, 계속 진행했습니다.또, 왜 당신이 본 행동을 보았는지.

도커 매개의

docker-compose.yml에서는 다음 명령을 사용했습니다.

volumes:
  - ./conf:/etc/mysql/conf.d
  - ./data:/var/lib/mysql
  - ./logs:/var/log/mysql

, 에 '가 붙은 국지적인 상대 경로를 됩니다../절대 경로를 사용하여 컨테이너 내부에 마운트합니다.을 사용하다

도커 런

고객님의 고객명docker run령어,, 음음음음음음 음음음음음음음

-v conf:/etc/mysql/conf.d -v data:/var/lib/mysql -v logs:/var/log/mysql

'''이래서''는 '''이래서''입니다 설명한 바와 같이 선두에 ./에러가 표시됩니다.즉, 이 조작은 할 수 없습니다.

-v ./conf:/etc/mysql/conf.d -v ./data:/var/lib/mysql -v ./logs:/var/log/mysql

무슨일이야

도커 구성을 통해 실행하면 예상대로 작동합니다. 즉, 호스트 마운트 볼륨이 사용됩니다., ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★docker run데이터는 대신 컨테이너 안에 보관되고 호스트 마운트 디렉토리는 사용되지 않습니다. ★★★★★★★★★★★★★★★★★★?

는 그 -v사용하신 구문에는 유효한 목적이 있습니다.그것은, 당신이 생각한 것과 다릅니다.지정한 방법으로 Docker 볼륨을 생성했습니다.콜론 앞의 선두 부분은 다음 규칙을 따릅니다.

  1. 의 「」의 ../에러가 표시됩니다.이것은 상대 디렉토리입니다.Error
  2. 의 「」의 ./보이는 것은 절대 경로입니다.컨테이너에 볼륨을 마운트합니다.
  3. 이런 걸 주면foo/bar이것은 상대 경로로 간주됩니다.에러
  4. 「」를 는,word:/some/path , , , 「 」word이름으로 받아들여지고 있습니다.은 '도커'라는 됩니다.word/some/path.

래서사 so를 사용할 때docker run볼륨을 생성했습니다.이것들은 컨테이너 안에서 사용되고 있었다.볼륨이 사용 중이었지만 호스트에 마운트된 볼륨이 아니었습니다.

연결할 수 없음 오류

네트워킹에 관해서는 당신의 설정에 문제가 없다고 생각합니다.는, 「 」의 「 」의 「 」의 「 」의 「 」로 하고 있습니다.docker run시나리오에서는 데이터베이스가 올바르게 설정되어 있지 않기 때문에 phpmyadmin은 mysql을 사용할 수 없었습니다.볼륨 문제를 수정하고 phpmyadmin 문제가 계속 발생할 경우, 특정 오류가 발생하면 질문을 업데이트하고 다시 볼 수 있도록 제 답변에 의견을 남겨주세요.

레퍼런스

도커 실행 참조(VOLUME)

=[ --volume=[host-src:]syslog-dest[:] :.이치노
은 [ [ [rw|ro], [z|Z]입니다
[r]shared|[r]private|[r]private의 [nocopy]는 nocopy로 한다.
host-src로 설정합니다.

이름 값은 a-z0-9, _(밑줄), .( 마침표) 또는 -(하이픈) 뒤에 영숫자로 시작해야 합니다.절대 경로는 /(앞으로 슬래시)로 시작합니다.

컨테이너 내 데이터 관리(볼륨 제거)

도커 데이터 볼륨은 컨테이너가 삭제된 후에도 유지됩니다.명명된 볼륨 또는 익명 볼륨을 생성할 수 있습니다.에 특정 . 를 들어, 명명된 have have have have have named named named named named named named named named named named named named named named named named named named named 。awesome:/bar에는 특정. 익명 볼륨에는 특정 소스가 없습니다.

도커 컴포지트와 귀사의 도커 런 라인 모두 문제 없습니다., 이 경우, 이 문구는 필요하지 않습니다.-P 「, 「」를하고 있기 입니다.-p깃발을 들다

 -P, --publish-all                 Publish all exposed ports to random ports

언급URL : https://stackoverflow.com/questions/41617893/different-result-using-docker-compose-vs-docker-run

반응형