คำถามติดแท็ก docker

นักเทียบท่าเป็นโครงการโอเพนซอร์ซที่ปรับใช้งานแอพพลิเคชั่นอัตโนมัติภายในคอนเทนเนอร์ซอฟต์แวร์

1
อัปเดตคอนเทนเนอร์นักเทียบท่าโดยไม่หยุดทำงาน
สมมติว่าฉันมีที่เก็บ Docker พร้อมเว็บเซิร์ฟเวอร์ (เช่น Apache 2) ตอนนี้ฉันต้องการอัปเดตระบบปฏิบัติการภายใต้ คำตอบ SF นี้บอกว่าวิธีที่ดีที่สุดคือการสร้างอิมเมจพื้นฐานและอิมเมจ Apache ของฉันใหม่ แต่การปรับใช้อิมเมจนั้นหมายถึงการหยุดทำงานเนื่องจากฉันต้องลบคอนเทนเนอร์เก่าก่อนที่จะสร้างใหม่ดังนั้นจึงมีคอนเทนเนอร์เดียวเท่านั้นที่เชื่อมกับพอร์ต 80/443 แต่ฉันจะปรับใช้การอัปเดตนี้ด้วยการหยุดทำงานเป็นศูนย์ได้อย่างไร ฉันควรใช้ตัวโหลดบาลานซ์และใช้การสื่อสารระหว่างคอนเทนเนอร์หรือไม่? และฉันจะอัพเดตตัวโหลดบาลานซ์ได้อย่างไร?
17 docker  uptime  coreos 

2
วิธีการเลือกที่อยู่ IP ภายนอกของเครื่องมือสร้างสมดุล Kubernetes ใน Google Kubernetes Engine
ฉันปรับใช้เว็บแอปโดยใช้ Google Kubernetes Engine และฉันต้องการให้สามารถเข้าถึงได้ผ่าน load balancer บนที่อยู่ IP แบบคงที่ที่ฉันควบคุมเป็นส่วนหนึ่งของโครงการเดียวกันในแพลตฟอร์ม Google Cloud เพราะชื่อโดเมนที่ฉันต้องการใช้ ชี้ไปที่ IP นี้แล้ว ไฟล์ yaml ที่ฉันใช้สำหรับพ็อดคือ: apiVersion: v1 kind: Pod metadata: name: my-pod labels: app: my-app spec: containers: - name: my-container image: gcr.io/my-project/my-app:latest ฉันสามารถตั้งค่าตัวโหลดบาลานซ์ได้โดยใช้: apiVersion: v1 kind: Service metadata: name: my-load-balancer spec: ports: - port: 80 targetPort: …

7
นักเทียบท่า & ชอร์วอลล์
ฉันใช้Shorewallบนเซิร์ฟเวอร์ของฉันเป็นไฟร์วอลล์แบบสแตนด์อโลนและต้องการใช้Dockerเช่นกัน โดยการใช้คอนเทนเนอร์ Docker และพอร์ตการเปลี่ยนเส้นทางของนักเทียบท่าตั้งกฎ / โซ่ iptables ของตัวเองซึ่งจะถูกฆ่าหากมีการรีสตาร์ท shorewall ดังนั้นภาชนะจะเข้าไม่ถึง มีใครจัดการบันทึก / กู้คืนกฎนักเทียบท่าเมื่อเริ่มต้นใหม่อีกครั้งหรือไม่มีใครมีวิธีแก้ปัญหาอื่นหรือไม่ ดูสิ่งนี้ด้วย: Shorewall Mailinglist พร้อมคำถามที่คล้ายกัน GitHub ฉบับที่ 2801 @ dotcloud / นักเทียบท่า
16 shorewall  docker 

2
วิธีเพิ่มไฟล์ลงใน container docker ที่ไม่มีการอนุญาต root
ฉันกำลังพยายามเพิ่มไฟล์ลงในภาพ Docker ที่สร้างขึ้นจากtomcatภาพอย่างเป็นทางการ ภาพนั้นดูเหมือนว่าจะไม่มีสิทธิ์ในการใช้รูทเนื่องจากฉันลงชื่อเข้าใช้ในฐานะผู้ใช้tomcatถ้าฉันใช้ bash: docker run -it tomcat /bin/bash tomcat@06359f7cc4db:/usr/local/tomcat$ ถ้าผมสั่งDockerfileการคัดลอกไฟล์ไปยังภาชนะที่ไฟล์มีสิทธิ์และเป็นเจ้าของ644 rootเท่าที่ฉันเข้าใจดูเหมือนว่าจะสมเหตุสมผลเนื่องจากคำสั่งทั้งหมดใน Dockerfile นั้นทำงานเหมือนรูท อย่างไรก็ตามหากฉันพยายามเปลี่ยนความเป็นเจ้าของไฟล์tomcat:tomcatนั้นเป็นฉันได้รับOperation not permittedข้อผิดพลาด ทำไมฉันไม่สามารถเปลี่ยนการอนุญาตของไฟล์ที่คัดลอกไปยังรูปภาพนั้นได้? สามารถทำซ้ำได้อย่างไร: mkdir docker-addfilepermission cd docker-addfilepermission touch test.txt echo 'FROM tomcat COPY test.txt /usr/local/tomcat/webapps/ RUN chown tomcat:tomcat /usr/local/tomcat/webapps/test.txt' > Dockerfile docker build . ผลลัพธ์ของdocker build .: Sending build context to Docker daemon …

5
“ ไม่ได้ระบุคำสั่ง” จากอิมเมจ / คอนเทนเนอร์ของนักเทียบท่าที่นำเข้าใหม่
ฉันพยายามที่จะนำนักเทียบท่าจากเครื่องหนึ่งไปใช้อีกเครื่องหนึ่งและพบกับข้อผิดพลาดนี้: " การตอบสนองข้อผิดพลาดจาก daemon: ไม่ได้ระบุคำสั่ง " ด้านล่างเป็นตัวอย่างแบบง่าย ๆ ที่แสดงปัญหา: docker --version Docker version 1.10.1, build 9e83765 docker pull ubuntu docker run --name u1 -dit ubuntu:latest docker export -o exported u1 docker stop u1 docker rm u1 docker import exported ubuntu:imported docker run --name u1 -dit ubuntu:imported docker: Error response from …
16 docker 

2
การซ้อนคำสั่ง execer run / run shell
แนะนำสั้น ๆ เกี่ยวกับกรณีการใช้งาน: ฉันใช้dockerภาชนะที่จะทำงานของฉันการทดสอบโดยใช้go นี้สามารถทำได้อย่างง่ายดายโดยใช้go test ./... docker exec <container> /bin/sh -c "go test ./..."น่าเสียดายที่go test ./...ทำงานในไดเรกทอรีย่อยทั้งหมดและฉันต้องการยกเว้นหนึ่งไดเรกทอรี (ไดเรกทอรีผู้ขาย) ทางออกที่แนะนำสำหรับสิ่งนี้คือการใช้คำสั่งต่อไปนี้: go test $(go list ./... | grep -v '<excluded>'อย่างใดนี้ทำให้ฉันกับผลลัพธ์ต่อไปนี้: docker run golang:1.6.2-alpine /bin/sh -c "go test " (ฉันได้ทดสอบสิ่งนี้ทั้งการรันและการประมวลผล แต่พวกเขาอาจใช้แกนเดียวกัน) เมื่อฉัน ssh ลงในภาชนะที่ใช้docker exec -it <container_id> /bin/shและเรียกใช้คำสั่งเดียวกันแน่นอนมันทำงานเหมือนมีเสน่ห์ ดูเหมือนว่าการเรียกใช้คำสั่งเชลล์ในรางที่นักเรียกใช้ / รันไม่สนับสนุนคำสั่งใด ๆ ที่ซ้อนอยู่ด้วย$()?
15 bash  docker 

2
นักเทียบท่า - พอร์ตที่เปิดเผยซึ่งเข้าถึงได้จากภายนอก - กฎ iptables ถูกละเว้น
ฉันมีที่จอดนักเทียบท่าทำงานเช่น: docker run --name some_container_1 -p 8080:80 -d some_image ซึ่งใช้งานได้ดี คอนเทนเนอร์เปิดออกเป็นพอร์ต 80 ถึง 8080 และสามารถเข้าถึงได้จาก localhost ด้วยเหตุผลบางอย่าง แต่ก็ไม่สนใจกฎ iptables INPUT อย่างสมบูรณ์และยังสามารถเข้าใช้จากภายนอกได้ ฉันจะ จำกัด การเข้าถึงคอนเทนเนอร์ Docker ของฉันให้อนุญาตเฉพาะเช่น IP 123.456.789.0 เพื่อเข้าถึงจากภายนอกได้อย่างไร ขอบคุณ sudo iptables -L -n -v - line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot …
15 docker  iptables 

2
ใช้ภาชนะบรรจุภายในเครื่องเสมือนจริงหรือไม่?
ฉันเข้าใจว่าคอนเทนเนอร์มีน้ำหนักเบากว่า VM มากกว่าเพราะมันไม่ได้ทำเวอร์ชวลไลเซชันฮาร์ดแวร์ แต่เพียงแยกซอฟต์แวร์ที่ทำงานอยู่ในตู้ออกจากซอฟต์แวร์ที่ทำงานในคอนเทนเนอร์อื่นบนระบบ สถานการณ์ของฉันเป็นเช่นนั้นฉันไม่สามารถที่จะซื้อเซิร์ฟเวอร์เพิ่มเติมและเซิร์ฟเวอร์ที่ฉันมีอยู่นั้นกำลังใช้ไฮเปอร์ไวเซอร์ทั้งหมด ฉันต้องจัดเตรียมอย่างน้อย 6 "เซิร์ฟเวอร์" เพื่อโฮสต์อินสแตนซ์ของแอปพลิเคชันเว็บที่ค่อนข้างเล็ก (แต่ละอินสแตนซ์สำหรับลูกค้ารายอื่น) มันจะเป็นการสิ้นเปลืองในการจัดเตรียม VM ใหม่สำหรับแต่ละเซิร์ฟเวอร์เหล่านี้ดังนั้นฉันวางแผนที่จะตั้งค่า 2 VM และทำอย่างใดอย่างหนึ่งต่อไปนี้: เรียกใช้หลายอินสแตนซ์ของแอปพลิเคชันบนแต่ละ VM โดยใช้โฮสต์เสมือน (apache) หรือ ตั้งค่าคอนเทนเนอร์บน VM ซึ่งจะทำให้ฉันสามารถแยกสภาพแวดล้อม พิจารณาเรื่องนี้มีค่าใช้จ่ายที่ไม่สำคัญเล็กน้อยที่เกี่ยวข้องกับระบบคอนเทนเนอร์ที่จะทำให้เป็นความคิดที่ดีที่จะใช้มันใน VM หรือมีเหตุผลทางเทคนิคอื่น ๆทำไมฉันไม่ต้องการใช้ตู้คอนเทนเนอร์?

5
ข้อผิดพลาดร้ายแรง: ไม่สามารถเปิดและล็อคตารางสิทธิ์: เครื่องมือจัดเก็บตารางสำหรับ 'ผู้ใช้' ไม่มีตัวเลือกนี้
ข้อความแสดงข้อผิดพลาดนี้ปรากฏขึ้นเมื่อฉันใช้ ubuntu 16.04 และ mysql ล่าสุด 5.7.19-0ubuntu0.16.04.1 ในอิมเมจ Docker จะแก้ไขอะไรได้บ้าง? เพื่อทำซ้ำข้อผิดพลาด รับDockerfile: FROM ubuntu:16.04 RUN apt update RUN DEBIAN_FRONTEND=noninteractive apt install -y mysql-server (มีที่นี่ด้วย ) สร้างและเรียกใช้: docker build -t mysqlfail . docker run -it mysqlfail tail -1 /var/log/mysql/error.log จะแสดงบันทึกข้อผิดพลาดต่อไปนี้: 2017-08-26T11: 48: 45.398445Z 1 [คำเตือน] root @ localhost ถูกสร้างขึ้นด้วยรหัสผ่านที่ว่างเปล่า! โปรดพิจารณาปิดตัวเลือก - …
15 mysql  docker 

1
จะดีบักการทำให้แคชใช้ไม่ได้ของ Docker อย่างไร
นักเทียบท่ามีแคชซึ่งยอดเยี่ยม แต่สิ่งที่ฉันเห็นในเอาต์พุต "นักสร้างพอร์ต" คือ: ---> Using cache หรือเอาต์พุตของคำสั่ง (ซึ่งบอกเป็นนัยว่าไม่ได้ใช้แคช) หลังจากหนึ่งขั้นตอนใน Dockerfile ของฉัน (สำเนา) มันชัดเจนว่าไม่ได้ใช้แคช แต่ฉันค่อนข้างแน่ใจว่าไม่มีอะไรเปลี่ยนแปลงในโฟลเดอร์ที่คัดลอก (มันเป็นแอพพลิเคชั่นของเราและฉันวิ่งเข้าไปในเคสที่ไม่มีแคชแม้ว่าเมื่อฉันปรับใช้สองครั้งในแถวเป็นต้น) มีวิธีใดที่จะให้นักเทียบท่าบอกฉันว่ามันคิดว่าเปลี่ยนไปหรือไม่? ฉันรู้ว่า Docker เคยตรวจสอบการประทับเวลาสำหรับสิ่งนี้ แต่นั่นได้รับการแก้ไขใน Docker 1.8 และฉันอยู่ที่ Docker 1.9.x ที่นี่
15 docker 

2
ไม่สามารถPullContainerErrorบน AWS ECS
ฉันไม่สามารถคลาน[registry-url]/[namespace]/[image]:[tag]URL รูปภาพสำหรับรูปDocker Hub ของฉันสำหรับ AWS ECS ได้ docker run -it hendry/countกับลูกค้าหางมันเป็นเพียงแค่ ดังนั้น URL ของ Docker Hub สำหรับภาพจะเป็นอย่างไร

1
api-get“ เกิดข้อผิดพลาดในการอ่านจากเซิร์ฟเวอร์” ใต้ Docker
ฉันใช้คำสั่งต่อไปนี้ใน Bash: DEBIAN_FRONTEND=noninteractive apt-get update -qq \ && apt-get install -y build-essential git libncurses5-dev openssl \ libssl-dev fop xsltproc unixodbc-dev curl มันทำงานได้ แต่ไม่สำเร็จตรงกลาง: Get:96 http://security.debian.org/ jessie/updates/main linux-libc-dev amd64 3.16.7-ckt9-3~deb8u1 [991 kB] Get:97 http://security.debian.org/ jessie/updates/main curl amd64 7.38.0-4+deb8u2 [200 kB] Get:98 http://security.debian.org/ jessie/updates/main openjdk-7-jre amd64 7u79-2.5.5-1~deb8u1 [176 kB] Get:99 http://http.debian.net/debian/ jessie/main …
14 debian  docker 

3
การ จำกัด การเข้าถึงเครือข่ายของคอนเทนเนอร์ Docker
ฉันกำลังอยู่ในขั้นตอนการสร้าง SFTP เฉพาะDocker container หนึ่งที่จะถูกใช้โดยหลาย ๆ คนเพื่อจุดประสงค์ในการอัพโหลดและจัดการไฟล์ในchrootสภาพแวดล้อม ed ของพวกเขาเอง บนกระดาษมันค่อนข้างปลอดภัย: ฉันจะปิดการใช้งานการbashลงชื่อเข้าใช้ทุกรูปแบบและฉันจะไม่เรียกใช้กระบวนการอื่นใดในนั้น อย่างไรก็ตามฉันต้องการทำให้แข็งขึ้นเพียงเล็กน้อย: ฉันต้องการป้องกันไม่ให้คอนเทนเนอร์นี้เข้าถึงอินเทอร์เน็ตจากภายในยกเว้นเพื่อเป็นเซิร์ฟเวอร์ SFTP เพื่อให้สิ่งต่าง ๆ ชัดเจน: ฉันรู้วิธีป้องกันไม่ให้โลกภายนอกเข้าถึงคอนเทนเนอร์ของฉัน - ฉันสามารถตั้งค่าiptablesกฎขาเข้าและฉันสามารถเปิดเผยเฉพาะพอร์ต SFTP ในคำสั่งเรียกใช้นักเทียบท่าของฉัน อย่างไรก็ตามฉันต้องการที่จะทำให้คำสั่งต่อไปนี้ (เป็นตัวอย่าง) ล้มเหลวเมื่อวิ่งเข้าไปในภาชนะ: curl google.com ความตั้งใจของฉันคือลดปริมาณความเสียหายที่คอนเทนเนอร์ที่แฮ็กสามารถทำได้ (ไม่สามารถใช้เพื่อส่งอีเมลขยะ ฯลฯ )
14 ssh  security  sftp  docker 

1
นับจำนวน CPU ที่อนุญาตในคอนเทนเนอร์ Docker
สถานการณ์เฉพาะของฉันมีดังต่อไปนี้ ฉันเปิดตัว docker container ด้วย cpuset เฉพาะ: docker run --cpuset-cpus="0-2" # ... ภายในคอนเทนเนอร์นั้นฉันเรียกใช้เชลล์สคริปต์เป็นจุดเริ่มต้นและเชลล์สคริปต์นั้นจะทำงานmakeในบางจุด ฉันต้องการทราบว่าจำนวนงานที่ดี ( -j) จะเป็นเท่าไหร่ แน่นอนว่าฉันสามารถส่งผ่านจำนวน CPU ที่จัดสรรผ่านสภาพแวดล้อม แต่วิธีตรวจสอบอัตโนมัติจะเป็นที่ต้องการมากกว่า ฉันรู้ว่าฉันสามารถใช้taskset -c -p $$หรือcat /proc/self/status | grep Cpus_allowed_listดึงข้อมูลCpus_allowedสำหรับกระบวนการปัจจุบัน แต่ฉันไม่ทราบวิธีการเรียกจำนวน CPU ที่แท้จริงที่อนุญาต ฉันต้องการหลีกเลี่ยงการแยกวิเคราะห์ผลลัพธ์ของคำสั่งเหล่านั้นหรือเล่นซอกับCpus_allowedหน้ากาก แต่จะทำเมื่อไม่มีตัวเลือก

8
นักเทียบท่าดึง: การหมดเวลาจับมือ TLS
ฉันได้รับนี้อย่างสม่ำเสมอ (Ubuntu 16.04 LTS): $ docker pull nginx Using default tag: latest Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout อย่างไรก็ตาม curl TLS ทำงานได้ดี (นอกเหนือจากข้อผิดพลาด auth): $ curl https://registry-1.docker.io/v2/ {"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]} และแม้แต่โปรแกรม golang ขนาดเล็ก (เพื่อเลียนแบบนักเทียบท่า) ก็ใช้งานได้ดี: package main import ( "fmt" "io/ioutil" "net/http" ) func main() { resp, …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.