Go에서 Docker 컨테이너에 대한 유효한 마운트 경로를 쓸 수 없습니다.
PHP 편집자 Zimo는 일부 개발자가 Go 언어를 사용하여 Docker 컨테이너를 작성할 때 문제에 직면했다는 사실을 발견했습니다. 즉, 컨테이너에 대한 유효한 탑재 경로를 작성할 수 없습니다. 이 문제로 인해 컨테이너에서 파일 읽기 및 쓰기 작업 중에 오류나 실패가 발생할 수 있습니다. 개발자에게 이는 의심할 여지 없이 실망스러운 문제입니다. 다음으로, 이 문제의 원인과 개발자가 이 문제를 해결하는 데 도움이 되는 가능한 솔루션을 살펴보겠습니다.
질문 내용
데이터베이스를 테스트하기 위해 테스트 컨테이너를 시작하려고 합니다. 테스트 용기를 사용하고 있습니다. 다음은 컨테이너 설정 방법에 대한 스니펫입니다.
으아악하지만 docker에서 오류가 발생합니다: failed to setup testunable to start container: failed to create container: error response from daemon: create /docker-entrypoint-initdb.d: "/docker-entrypoint-initdb.d" 包括本地卷名称的无效字符,仅允许“[a-za-z0-9][a-za-z0-9_.-]”。如果您打算传递主机目录,请使用绝对路径
.
때때로 이 오류는 다음과 같습니다. 无法设置测试无法启动容器:无法创建容器:守护程序的错误响应:“卷”类型的安装配置无效:安装路径无效:'“c” /desktop/folder/golang/tgbotreminder/internal/db/postgresql/migration/000001_init_schema.up"' 挂载路径必须是绝对
저는 다음과 같은 다양한 경로를 시도했습니다:
//c/用户/...
c/用户/...
/%cd%/桌面/...
$home/桌面/文件夹/...
그러나 아무것도 나에게 도움이 되지 않았습니다.
올바르게 수행하는 방법은 무엇입니까?
솔루션
tl;dr
교체
으아악그리고
으아악질문 1
"/docker-entrypoint-initdb.d"에는 로컬 볼륨 이름에 잘못된 문자가 포함되어 있습니다. "[a-za-z0-9][a-za-z0-9_.-]"만 허용됩니다. p>
아는 것이 중요합니다 마운트에는 세 가지 유형이 있습니다 :
-
볼륨 은 docker(Linux의 경우
/var/lib/docker/volumes/
)가 관리하는 호스트 파일 시스템의 일부에 저장됩니다. Docker가 아닌 프로세스는 파일 시스템의 이 부분을 수정해서는 안 됩니다. 볼륨은 Docker에서 데이터를 저장하는 가장 좋은 방법입니다. - 번들 설치 는 호스트 시스템의 어디든지 저장할 수 있습니다. 중요한 시스템 파일이나 디렉터리일 수도 있습니다. Docker 호스트 또는 Docker 컨테이너의 Docker가 아닌 프로세스에 의해 언제든지 수정될 수 있습니다.
-
tmpfs
마운트 는 호스트 시스템의 메모리에만 저장되며 호스트 시스템의 파일 시스템에는 절대 기록되지 않습니다.
volumemounts
는 볼륨 마운트를 지정하는 데 사용됩니다. github.com/testcontainers/<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="94e0f1e7e0f7fbfae0f5fdfaf1e6e7b9f3fbd4e2a4baa5a6baa4">[이메일 보호]</a>
volumemounts
의 항목 값은 [a-za-z0-9][a-za-z0-9_.-만 허용하는 <code>volumemounts
用于指定卷挂载。从 github.com/testcontainers/<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="94e0f1e7e0f7fbfae0f5fdfaf1e6e7b9f3fbd4e2a4baa5a6baa4">[email protected]</a>
的值volumemounts
中的条目存储卷名称,该条目仅允许 [a-za-z0-9][a-za-z0-9_.-]
,这就是您看到错误消息的原因。顺便说一句,要看到上面的错误消息,您的代码必须是这样的(请注意 /docker-entrypoint-initdb.d
볼륨 이름
/docker-entrypoint-initdb.d
는 키가 아니라 값이라는 점에 유의하세요). 으아악
질문 2"볼륨" 유형에 대한 잘못된 마운트 구성: 잘못된 마운트 경로: "c/desktop/folder/golang/tgbotreminder/internal/db/postgresql/migration/000001_init_schema.up" 마운트 경로는 절대 경로여야 합니다
이 오류 메시지를 보려면 코드가 다음과 같아야 합니다.
으아악
github.com/testcontainers/ <a href="/cdn-cgi/l/email-protection" class="__cf_email__" __cf_email__ data-cfemail="4443021373027272b2a302a30252a2a2a2a2113632132b21132b21132b21132b2b2a2b2a2b2a2b2b2b2binging a>
, volumemounts
中条目的键存储挂载路径。由于挂载路径包含双引号("> as </a>
github.com/testcontainers/testcontainers-go
업그레이드를 고려해보세요
버전 v0.13.0containerrequest.bindmounts
和 containerrequest.volumemounts
替换为 containerrequest.mounts
, . 이는 "맵 기반 데이터 구조가 다소 혼란스럽기 때문입니다. 이번 변경으로 모든 구성 요소에 대한 전용 유형을 도입하여 IDE 및 컴파일러의 도움을 받음으로써 혼란을 피할 수 있습니다". (pr#386
升级到 github.com/testcontainers/<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9aeeffe9eef9f5f4eefbf3f4ffe8e9b7fdf5daecaab4a8abb4aa">[电子邮件受保护]</a>
后,可以使用以下方式指定绑定安装:
Mounts: testcontainers.Mounts( testcontainers.BindMount(path, "/docker-entrypoint-initdb.d"), ),
위 내용은 Go에서 Docker 컨테이너에 대한 유효한 마운트 경로를 쓸 수 없습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









Go Language의 부동 소수점 번호 작동에 사용되는 라이브러리는 정확도를 보장하는 방법을 소개합니다.

GO의 어떤 라이브러리가 대기업이나 잘 알려진 오픈 소스 프로젝트에서 개발 했습니까? GO에 프로그래밍 할 때 개발자는 종종 몇 가지 일반적인 요구를 만납니다.

Go Crawler Colly의 대기열 스레딩 문제는 Colly Crawler 라이브러리를 GO 언어로 사용하는 문제를 탐구합니다. � ...

Go Language의 문자열 인쇄의 차이 : println 및 String () 함수 사용 효과의 차이가 진행 중입니다 ...

GO 언어에서 구조를 정의하는 두 가지 방법 : VAR과 유형 키워드의 차이. 구조를 정의 할 때 Go Language는 종종 두 가지 다른 글쓰기 방법을 본다 : 첫째 ...

Go Pointer Syntax 및 Viper Library 사용의 문제 해결 GO 언어로 프로그래밍 할 때 특히 포인터의 구문 및 사용법을 이해하는 것이 중요합니다.

GO의지도 반복이 왜 모든 값이 마지막 요소가되게합니까? Go Language에서 인터뷰 질문에 직면했을 때, 당신은 종종지도를 만납니다 ...

Go Language에서 메시지 대기열을 구현하기 위해 Redisstream을 사용하는 문제는 Go Language와 Redis를 사용하는 것입니다 ...
