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

Dockerfile คือไฟล์ที่มีคำแนะนำในการสร้างอิมเมจ Docker

6
WORKDIR บน Dockerfile คืออะไร?
ฉันกำลังเรียนรู้ Docker หลายครั้งที่ฉันเห็นว่าDockerfileมีWORKDIRคำสั่ง: FROM node:latest RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY package.json /usr/src/app/ RUN npm install COPY . /usr/src/app EXPOSE 3000 CMD [ “npm”, “start” ] ฉันไม่สามารถละเว้นWORKDIRและCopyมีเพียงแค่Dockerfileรากของโครงการของฉันได้หรือไม่? อะไรคือข้อเสียของการใช้แนวทางนี้?
115 docker  dockerfile 

2
หลายจาก - ความหมาย
ฉันต้องการสร้างอิมเมจนักเทียบท่าสำหรับโปรเจ็กต์ Linkuriousบน github ซึ่งต้องใช้ทั้งฐานข้อมูล Neo4j และ Node.js เพื่อรัน แนวทางแรกของฉันคือการประกาศภาพพื้นฐานสำหรับภาพของฉันซึ่งมี Neo4j เอกสารอ้างอิงไม่ได้กำหนด "รูปพื้นฐาน" ในลักษณะที่เป็นประโยชน์ใด ๆ : ภาพฐาน: ภาพที่ไม่มีพาเรนต์เป็นภาพฐาน จากที่ฉันอ่านพบว่าฉันจะมีภาพฐานได้ก็ต่อเมื่อภาพนั้นไม่มีภาพฐาน แต่ภาพฐานคืออะไร? หมายความว่าถ้าฉันประกาศ neo4j / neo4j ในคำสั่ง FROM เมื่อรูปภาพของฉันถูกเรียกใช้ฐานข้อมูลนีโอจะทำงานโดยอัตโนมัติและพร้อมใช้งานภายในคอนเทนเนอร์บนพอร์ต 7474 อ่านข้อมูลอ้างอิง Docker (ดู: https://docs.docker.com/reference/builder/#from ) ฉันเห็น: FROM สามารถปรากฏได้หลายครั้งภายใน Dockerfile เดียวเพื่อสร้างภาพหลายภาพ เพียงจดบันทึกเอาต์พุต ID ภาพสุดท้ายโดยการคอมมิตก่อนคำสั่ง FROM ใหม่แต่ละคำสั่ง ฉันต้องการสร้างภาพหลายภาพหรือไม่? ดูเหมือนว่าสิ่งที่ฉันต้องการคือการมีภาพเดียวที่มีเนื้อหาของภาพอื่น ๆ เช่น neo4j และ node.js ฉันไม่พบคำสั่งในการประกาศการอ้างอิงในคู่มืออ้างอิง …
113 docker  dockerfile 

2
รูปภาพ Docker - ประเภท Slim vs Slim-Stretch vs Stretch เทียบกับ Alpine
ฉันต้องการรับอิมเมจนักเทียบท่าเพื่อสร้างแอพ java และดูรูปแบบต่างๆของอิมเมจ OpenJDK ที่มีอยู่ ฉันกำลังดูที่นี่https://github.com/docker-library/openjdk/tree/master/8/jdkและเห็นอัลไพน์บางเฉียบและหน้าต่าง อะไรคือความแตกต่างระหว่างสิ่งเหล่านี้และแต่ละตัวแปรให้อะไร?
113 java  docker  dockerfile 

3
Dockerfile build - สามารถละเว้นข้อผิดพลาดได้หรือไม่?
ฉันมี Dockerfile เมื่อสร้างอิมเมจบิวด์ล้มเหลวเนื่องจากข้อผิดพลาดนี้: automake: error: no 'Makefile.am' found for any configure output Error build: The command [/bin/sh -c aclocal && autoconf && automake -a] returned a non-zero code: 1 ซึ่งในความเป็นจริงไม่เป็นอันตราย ไลบรารีสร้างได้ดี แต่ Docker หยุดการสร้างเมื่อได้รับข้อผิดพลาดนี้ มีวิธีใดบ้างที่ฉันสามารถสั่งให้ Docker เพิกเฉยต่อสิ่งนี้ได้
112 docker  dockerfile 

4
ฉันจะใช้ตัวแปรภายใน Dockerfile CMD ได้อย่างไร
ภายใน Dockerfile ของฉัน: ENV PROJECTNAME mytestwebsite CMD ["django-admin", "startproject", "$PROJECTNAME"] ข้อผิดพลาด: CommandError: '$PROJECTNAME' is not a valid project name วิธีแก้ปัญหาที่เร็วที่สุดที่นี่คืออะไร? Docker มีแผนที่จะ "แก้ไข" หรือแนะนำฟังก์ชันนี้ใน Docker เวอร์ชันที่ใหม่กว่าหรือไม่ หมายเหตุ: ถ้าฉันลบบรรทัด CMD ออกจากไฟล์ Docker แล้วเรียกใช้คอนเทนเนอร์ Docker ฉันสามารถเรียกใช้ Django-admin startproject $ PROJECTNAME ด้วยตนเองจากภายในคอนเทนเนอร์และมันจะสร้างโครงการ ...
112 docker  dockerfile 

14
เชื่อมต่อกับ mysql ใน Docker container จากโฮสต์
(อาจเป็นคำถามที่โง่เนื่องจากความรู้ที่ จำกัด ของฉันเกี่ยวกับ Docker หรือการดูแลระบบ mysql แต่เนื่องจากฉันใช้เวลาทั้งเย็นกับปัญหานี้ฉันจึงกล้าที่จะถามมัน) โดยสังเขป ฉันต้องการเรียกใช้ mysql ในคอนเทนเนอร์นักเทียบท่าและเชื่อมต่อจากโฮสต์ของฉัน จนถึงตอนนี้สิ่งที่ดีที่สุดที่ฉันทำได้คือ: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) รายละเอียดเพิ่มเติม ฉันใช้สิ่งต่อไปนี้Dockerfile: FROM ubuntu:14.04.3 RUN apt-get update && apt-get install -y mysql-server # Ensure we won't bind to localhost only RUN grep -v bind-address /etc/mysql/my.cnf …
111 mysql  docker  dockerfile 

3
ฉันจะใช้ตัวแปรสภาพแวดล้อม Docker ในอาร์เรย์ ENTRYPOINT ได้อย่างไร
หากฉันตั้งค่าตัวแปรสภาพแวดล้อมให้พูดENV ADDRESSEE=worldและฉันต้องการใช้ในสคริปต์จุดเริ่มต้นที่เชื่อมต่อกันเป็นสตริงคงที่เช่น: ENTRYPOINT ["./greeting", "--message", "Hello, world!"] ด้วยworldการที่คุณค่าของสิ่งแวดล้อมเปลี่ยนแปลงได้ฉันจะทำอย่างไร? ฉันลองใช้"Hello, $ADDRESSEE"แต่ดูเหมือนจะไม่ได้ผลเพราะต้องใช้$ADDRESSEEตัวอักษร.
111 docker  dockerfile 

5
การปรับใช้แอพขวดขั้นต่ำในนักเทียบท่า - ปัญหาการเชื่อมต่อเซิร์ฟเวอร์
ฉันมี app 5000ที่เป็นเพียงการพึ่งพาเป็นกระติกน้ำซึ่งไหลนักเทียบท่าอยู่ข้างนอกดีและผูกกับพอร์ตเริ่มต้น นี่คือแหล่งที่มาทั้งหมด: from flask import Flask app = Flask(__name__) app.debug = True @app.route('/') def main(): return 'hi' if __name__ == '__main__': app.run() ปัญหาคือเมื่อฉันปรับใช้สิ่งนี้ในนักเทียบท่าเซิร์ฟเวอร์กำลังทำงาน แต่ไม่สามารถเข้าถึงได้จากภายนอกคอนเทนเนอร์ ด้านล่างนี้คือ Dockerfile ของฉัน ภาพเป็น Ubuntu ที่ติดตั้งกระติกน้ำ น้ำมันดินมีเพียงindex.pyรายการด้านบน # Dockerfile FROM dreen/flask MAINTAINER dreen WORKDIR /srv # Get source RUN mkdir -p /srv COPY perfektimprezy.tar.gz …

12
วิธีอัปเดตไฟล์ / etc / hosts ในอิมเมจ Docker ระหว่าง "สร้างนักเทียบท่า"
ฉันต้องการอัปเดต/etc/hostsไฟล์ของฉันในระหว่าง "Docker build" ฉันเพิ่มบรรทัดด้านล่างใน Dockerfile แต่ไม่มีการอัปเดต/etc/hostsไฟล์หรือให้ข้อผิดพลาดใด ๆ RUN echo "192.168.33.11 mynginx" >> /etc/hosts /etc/hostsฉันจำเป็นต้องปรับปรุง ใครสามารถแนะนำเกี่ยวกับเรื่องนี้?
107 docker  dockerfile  hosts 

6
COPY / ADD ตามเงื่อนไขใน Dockerfile?
ภายใน Dockerfiles ของฉันฉันต้องการคัดลอกไฟล์ลงในรูปภาพของฉันหากมีอยู่ไฟล์ requirements.txt สำหรับ pip ดูเหมือนจะเป็นตัวเลือกที่ดี แต่จะทำได้อย่างไร COPY (requirements.txt if test -e requirements.txt; fi) /destination ... RUN if test -e requirements.txt; then pip install -r requirements.txt; fi หรือ if test -e requirements.txt; then COPY requiements.txt /destination; fi RUN if test -e requirements.txt; then pip install -r requirements.txt; fi
105 docker  dockerfile 

7
วิธีเชื่อมโยงคอนเทนเนอร์ php-fpm และ Nginx Docker อย่างถูกต้อง?
ฉันกำลังพยายามเชื่อมโยง 2 คอนเทนเนอร์แยกกัน: nginx: ล่าสุด php: fpm ปัญหาคือสคริปต์ php ไม่ทำงาน บางทีการกำหนดค่า php-fpm ไม่ถูกต้อง นี่คือรหัสแหล่งที่มาซึ่งอยู่ในของฉันพื้นที่เก็บข้อมูล นี่คือไฟล์docker-compose.yml: nginx: build: . ports: - "80:80" - "443:443" volumes: - ./:/var/www/test/ links: - fpm fpm: image: php:fpm ports: - "9000:9000" และDockerfileสิ่งที่ฉันใช้ในการสร้างอิมเมจที่กำหนดเองตาม nginx one: FROM nginx # Change Nginx config here... RUN rm /etc/nginx/conf.d/default.conf ADD ./default.conf …

2
นักเทียบท่าจะเปิดเผยพอร์ตทั้งหมดหรือช่วงของพอร์ตตั้งแต่ 7000 ถึง 8000
ฉันสามารถระบุช่วงพอร์ตใน Dockerfile ได้หรือไม่ EXPOSE 7000-8000 และเมื่อเรียกใช้คอนเทนเนอร์ผูกพอร์ตที่เปิดเผยเหล่านี้ทั้งหมดเข้ากับพอร์ตเดียวกันบนเครื่องโฮสต์? docker run -p 7000-8000:7000-8000
101 docker  dockerfile 

5
apt-get ติดตั้ง tzdata แบบไม่โต้ตอบ
เมื่อฉันพยายามที่จะ apt-get install -y tzdata ตัวเลือกบรรทัดคำสั่งสำหรับการเลือกเขตเวลาจะปรากฏขึ้น ฉันพยายามใช้สิ่งนี้ในสคริปต์เพื่อทำการตั้งค่าฉันจะทำให้ apt-get ทำงานโดยไม่ต้องป้อนข้อมูลผู้ใช้ได้อย่างไร ฉันรู้ว่าต้องกำหนดค่า tzdata ใหม่ที่ฉันทำได้ echo "America/New_York" > /etc/timezone dpkg-reconfigure -f noninteractive tzdata แต่เมื่อติดตั้งฉันต้องการให้มันทำงานได้อย่างสมบูรณ์แม้ว่าจะไม่ได้ตั้งเขตเวลาที่ถูกต้องก็ตามฉันสามารถกำหนดค่าใหม่ได้ตลอดเวลา ฉันเหนื่อย echo 5 | apt-get install -y tzdata แต่มันไม่ทำงานตามที่คาดไว้

3
นักเทียบท่าจะรันข้อกำหนด pip.txt เฉพาะเมื่อมีการเปลี่ยนแปลงหรือไม่
ใน Dockerfile ฉันมีเลเยอร์ที่ติดตั้งrequirements.txt: FROM python:2.7 RUN pip install -r requirements.txt เมื่อฉันสร้างอิมเมจนักเทียบท่ามันจะเรียกใช้กระบวนการทั้งหมดโดยไม่คำนึงถึงการเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นกับไฟล์นี้ ฉันจะแน่ใจได้อย่างไรว่า Docker ทำงานเฉพาะpip install -r requirements.txtเมื่อมีการเปลี่ยนแปลงไฟล์เท่านั้น Removing intermediate container f98c845d0f05 Step 3 : RUN pip install -r requirements.txt ---> Running in 8ceb63abaef6 Collecting https://github.com/tomchristie/django-rest-framework/archive/master.zip (from -r requirements.txt (line 30)) Downloading https://github.com/tomchristie/django-rest-framework/archive/master.zip Collecting Django==1.8.7 (from -r requirements.txt (line …

9
Docker-compose ตรวจสอบว่าการเชื่อมต่อ mysql พร้อมหรือไม่
ฉันพยายามตรวจสอบให้แน่ใจว่าที่เก็บแอปของฉันไม่ได้เรียกใช้การโยกย้าย / เริ่มต้นจนกว่าคอนเทนเนอร์ db จะเริ่มทำงานและพร้อมที่จะยอมรับการเชื่อมต่อ ดังนั้นฉันจึงตัดสินใจใช้ healthcheck และขึ้นอยู่กับ option ใน docker compose file v2.0 ในแอพฉันมีสิ่งต่อไปนี้ app: ... depends_on: db: condition: service_healthy ในทางกลับกันฐานข้อมูลมีการตรวจสุขภาพดังต่อไปนี้ db: ... healthcheck: test: TEST_GOES_HERE timeout: 20s retries: 10 ฉันได้ลองสองวิธีเช่น: ตรวจสอบให้แน่ใจว่าได้สร้าง db DIR แล้ว test: ["CMD", "test -f var/lib/mysql/db"] รับเวอร์ชัน mysql: test: ["CMD", "echo 'SELECT version();'| mysql"] Ping …

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