도커 컴포지트와 도커 실행을 사용한 결과 차이
다른 컨테이너와 링크할 수 있는 범용 공통 데이터베이스를 설정하고 있습니다.했을 때 다른 결과가 나타나다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 볼륨을 생성했습니다.콜론 앞의 선두 부분은 다음 규칙을 따릅니다.
- 의 「」의 .
./
에러가 표시됩니다.이것은 상대 디렉토리입니다.Error - 의 「」의 .
/
보이는 것은 절대 경로입니다.컨테이너에 볼륨을 마운트합니다. - 이런 걸 주면
foo/bar
이것은 상대 경로로 간주됩니다.에러 - 「」를 는,
word:/some/path
, , , 「 」word
이름으로 받아들여지고 있습니다.은 '도커'라는 됩니다.word
/some/path
.
래서사 so를 사용할 때docker run
볼륨을 생성했습니다.이것들은 컨테이너 안에서 사용되고 있었다.볼륨이 사용 중이었지만 호스트에 마운트된 볼륨이 아니었습니다.
연결할 수 없음 오류
네트워킹에 관해서는 당신의 설정에 문제가 없다고 생각합니다.는, 「 」의 「 」의 「 」의 「 」의 「 」로 하고 있습니다.docker run
시나리오에서는 데이터베이스가 올바르게 설정되어 있지 않기 때문에 phpmyadmin은 mysql을 사용할 수 없었습니다.볼륨 문제를 수정하고 phpmyadmin 문제가 계속 발생할 경우, 특정 오류가 발생하면 질문을 업데이트하고 다시 볼 수 있도록 제 답변에 의견을 남겨주세요.
레퍼런스
=[ --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
'sourcecode' 카테고리의 다른 글
JavaScript에서 JSON 문자열을 작성하는 방법 (0) | 2023.02.07 |
---|---|
JavaScript로 div 스크린샷을 찍는 방법 (0) | 2023.01.30 |
mysqli 트랜잭션/저장점 함수와 query()를 사용한 수동 함수 비교 (0) | 2023.01.30 |
vuejs 앱에서 동적 기본 URL을 설정하려면 어떻게 해야 합니까? (0) | 2023.01.30 |
Panda 데이터 프레임에서 여러 열 선택 (0) | 2023.01.30 |