6

Próbowałem zamontować SQL i pojemnik do przechowywania do kontenera WordPress w dockingu. Wygląda na to, że udało się zainstalować SQL, ale nie udało się go zamontować. Instancja jest oparta na this post.Usterka budowania dokowania podczas używania gcsfuse do zamontowania google storage

Dołączyłem plik Docker i błąd poniżej, a także moje polecenie kompilacji. Komenda

Budowa:

docker build -t ic/spm .

Dockerfile:

FROM wordpress 
MAINTAINER Gareth Williams <[email protected]> 

# Move login creds locally 
ADD ./creds.json /creds.json 

# install sudo, wget and gcsfuse 
ENV GCSFUSE_REPO=gcsfuse-jessie 
RUN apt-get update && \ 
     apt-get -y install sudo && \ 
     apt-get install -y curl ca-certificates && \ 
     echo "deb http://packages.cloud.google.com/apt $GCSFUSE_REPO main" > /etc/apt/sources.list.d/gcsfuse.list && \ 
     curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - && \ 
     apt-get update && \ 
     apt-get install -y gcsfuse wget && \ 
     apt-get remove -y curl --purge && \ 
     apt-get autoremove -y && \ 
     rm -rf /var/lib/apt/lists/* 

# Config fuse 
RUN chmod a+r /etc/fuse.conf 
RUN perl -i -pe 's/#user_allow_other/user_allow_other/g' /etc/fuse.conf 

# Setup sql proxy 
RUN sudo mkdir /cloudsql 
RUN sudo chmod 777 /cloudsql 
ADD https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 cloud_sql_proxy.linux.amd64 
RUN mv cloud_sql_proxy.linux.amd64 cloud_sql_proxy && chmod +x ./cloud_sql_proxy 
RUN ./cloud_sql_proxy -dir=/cloudsql -fuse -credential_file=/creds.json & 
# mysql -u icroot -S /cloudsql/[INSTANCE_CONNECTION_NAME] 

# Perform Cloud Storage FUSE mounting for uploads folder 
RUN mkdir /mnt/uploads 
RUN chmod a+w /mnt/uploads 
#RUN chown www-data:www-data -R /mnt && groupadd fuse && gpasswd -a www-data fuse && chmod g+rw /dev/fuse 
USER www-data 
RUN gcsfuse --key-file /creds.json \ 
    --debug_gcs --debug_http --debug_fuse --debug_invariants \ 
    --dir-mode "777" -o allow_other spm-bucket /mnt/uploads 

Błąd:

Step 17 : RUN gcsfuse --key-file /creds.json --foreground --debug_gcs --debug_http --debug_fuse --debug_invariants --dir-mode "777" -o allow_other spm-bucket /mnt/uploads 
---> Running in 7e3f31221bee 
Using mount point: /mnt/uploads 
Opening GCS connection... 
Opening bucket... 
gcs: Req    0x0: <- ListObjects() 
http: ========== REQUEST: 
GET http://www.googleapis.com/storage/v1/b/spm-bucket/o?maxResults=1&projection=full HTTP/1.1 
Host: www.googleapis.com 
User-Agent: gcsfuse/0.0 
Authorization: Bearer ya29.ElrQAw8oxClKt8YGvtmxhc7z2Y2LufvL0fBueq1UESjYYjRrdxukNTQqO1qfM8e8h-rqfbOWNSjVK2rCRXVrEDla-CiUVhHwT6X71Y1Djb0jDJg7z3KblgNQPrc 
Accept-Encoding: gzip 

http: ========== RESPONSE: 
HTTP/2.0 200 OK 
Content-Length: 31 
Alt-Svc: quic=":443"; ma=2592000; v="35,34" 
Cache-Control: private, max-age=0, must-revalidate, no-transform 
Content-Type: application/json; charset=UTF-8 
Date: Wed, 11 Jan 2017 09:19:05 GMT 
Expires: Wed, 11 Jan 2017 09:19:05 GMT 
Server: UploadServer 
Vary: Origin 
Vary: X-Origin 
X-Guploader-Uploadid: AEnB2UpTqXhtHW906FFDTRsz4FjHjFu_E84wYhvt0zhaVFuMpqSY1fsd1XcrEcpsYBBwX1mqf0ZXRVWJH05ThtDQIfFKHd4PFw 

{ 
"kind": "storage#objects" 
} 
http: ==================== 
gcs: Req    0x0: -> ListObjects() (1.793169206s): OK 
Mounting file system... 
mountWithArgs: mountWithConn: Mount: mount: running fusermount: exit status 1 

stderr: 
fusermount: failed to open /dev/fuse: Operation not permitted 
+0

Masz problem z uwierzytelnianiem. Opublikowalem podobne q z nieco bardziej szczegółowymi informacjami. Być pomocne przy wyświetlaniu wyników informacji o usłudze gcloud, czy uwierzytelniłeś swoje konto usługi? Czy możesz po prostu dodać gcloud auth activate-service-account --key-file <ścieżka do .json> http://stackoverflow.com/questions/41685351/docker-container-for-google-cloudml-on-compute-engine -autentykowanie-do-montażu – bw4sz

+0

@ bw4sz Właśnie próbowałem i to wydaje się być w porządku, mogę autoryzować. Mogę tylko myśleć, że ma to coś wspólnego z bezpiecznikiem, ale nie mam pojęcia, co to może być. – gazzwi86

+0

Na jakiej platformie uruchamiasz okno dokowane? – mustaccio

Odpowiedz

-1

Twoje www-data mieć problem zezwolenia w dockerfile:

#RUN chown www-data:www-data -R /mnt && groupadd fuse && gpasswd -a www-data fuse && chmod g+rw /dev/fuse 

Odkomentuj ta linia

+0

Niższa linia była wcześniej używana, a przywrócenie nie działało. Problem wydaje się być związany z uprawnieniami do dokowania. Nie ma flagi do uruchomienia jako -prywatnej podczas budowania – gazzwi86

+2

jest to problem przez długi czas, sprawdź [to] (https://github.com/docker/docker/issues/1916), w podsumowaniu, możesz działają tylko, uruchamiając kontener o zwiększonych możliwościach, instalując wymagane oprogramowanie, a następnie tworząc obraz z tego kontenera. – Allen

+0

To powinna być rzeczywista odpowiedź. – Adam

0

Jeśli prowadzisz swój pojemnik na GKE, a chcesz używać gcsfuse, uprawnienia powinny być automatycznie dziedziczone na koncie lokalnie. Ponadto ... istnieje zastrzeżenie, że musisz upewnić się, że w klastrze Twój program musi mieć dostęp do magazynu. Dlatego upewnij się, że klaster ma ustawione uprawnienia do pełnego dostępu. W ten sposób gcsfuse może zamontować twoje wiadra na GCS w kontenerze bez martwienia się o przekazywanie plików referencyjnych i wszystkich innych rzeczy ... czyniąc implementację całkiem prostą.

W pliku dokowanym ... upewnij się, że robisz komendy apt, aby pobrać i zainstalować aplikację gcsfuse.

Osobiście stworzyłem skrypt powłoki, który wywołuję po uruchomieniu instancji, która instaluje moje katalogi, których potrzebowałem.

Coś takiego ...

Docker Wejście

ENTRYPOINT ["/opt/entry.sh"]

przykład skrypt entry.sh

gcsfuse [gcs bucket name] [local folder to mount as]

Podczas generowania klaster GKE, upewnij się, aby dodać zakres przechowywania

Mam nadzieję, że to pomoże.