זהו נושא דיון מלווה לערך המקורי שב־https://www.tocode.co.il/bundles/docker/lessons/compose-dev-example-part3
זהו נושא דיון מלווה לערך המקורי שב־https://www.tocode.co.il/bundles/docker/lessons/compose-dev-example-part3
נתקלתי בבעיית הרשאות.
להבדיל ממה שמודגם בווידאו של הפרק, אצלי גם ביצירת תקייה פנימית, עדיין מתקבלת אותה הודעת שגיאה:
אגב, לא ברור לי למה, למרות שאני על root כשאני יוצר את תת-התיקייה בקונטיינר, היא נוצרת כשייכת ל-node
מחוץ לקונטיינר (במחשב שלי) כל התיקיות האלו נראות כשייכות למשתמש הרגיל שלי (מבילי שבצעתי שינויים).
במצב הזה אני לא יכול להריץ את npx express-generator --no-view
היי @ynonp , בעיית המשך - nodemon לא מתפקד כמצופה.
לכאורה זה לא העיניין בקורס דוקר, אבל רוצה להבין אם זה נובע ממשהו שאני עושה לא נכון עם הקונטיינרים.
[השתמשתי ב: express-generator מהמחשב שלי, כי זה לא עבד מתוך הקונטיינר כמפורט מעלה]
למרות שהפקודה היא עם nodemon, לאחר שינוי ושמירה התוכן לא מתעדכן:
אחרי הורדה ההעלאה מחדש, מקבל תוכן תקין, אבל שוב בשינוי הטקסט (ושמירה) אין עדכון אוטומטי כמצופה:
אם יש צורך, זה הקטע הרלוונטי מה: docker-compose.yml
server:
image: node:17
working_dir: /app
command: bash -c "npm install && npm install -g nodemon && nodemon bin/www"
env_file: ./env/dev.env
environment:
DB_HOST: db
secrets:
- postgres-passwd
volumes:
- ./server:/app
ports:
- "3000:3000"
איזה קובץ אתה מעדכן?
בהתחלה דיברתי על הפעלת הפקודה npx express-generator --no-view
כדי ליצור קבצים של פרויקט express בקונטיינר.
כפי שהדגמת, זה לא עובד בתיקיית app המקושרת לווליום שנוצר בעקבות המיפוי עקב בעיית הרשאות. אבל שלא כמו שהראת, יצירת תת-תיקייה והפעלת הפקודה הנ"ל בתוכה, עדיין מושפעת אצלי מהבעייה הזו (ראה צילום מסך מהתגובה הראשונה שלי).
בהמשך, אחרי שיצרתי את הפרויקט במחשב שלי ולא בקונטיינר (כדי לעקוף את הבעייה הנ"ל), עקבתי אחרי הווידאו שלך ועדכנתי כמוך את הקובץ routs/index.js כדי להחליף את render ב-send. למרות ש-nodemon מופעל (כמו שרואים בצילום המסך) השינוי בקובץ (ושמירתו) לא גרם לעדכון אוטומטי.
אחרי הורדה ההעלאה מחדש עם docker-compose השינוי עבר והוצג Hello world כשניגשים אליו.
שיניתי רק את הטקסט, כדי לראות אם הפעם nodemon יעבוד כמצופה, אך כפי שאפשר לראות מצילום הלוג של השרת, קיבלתי 304 והתצאה לא השתנתה.
אני חושד ששתי הבעיות קשורות ומשהו במיפוי של הווליום לא מתפקד כפי שאתה הצגת.
אשמח לנסות אצלי את הפרויקט שאתה מריץ כדי לראות אם אצלי זה עובד ויש הבדל בגירסאות של דוקר או משהו כזה, או שמשהו בפרויקט שבור
יכול להעלות רק את הפרויקט הזה לגיטהאב או משהו דומה ולהדביק פה לינק?
לפחות לשלב הראשון (בו אני לא מצליח להפעיל npx express-generator
מתוך תת-תקייה של app בקונטיינר) אתה יכול להשתמש בתוכן של התקיית before שלך בפרק 11:
כשקובץ docker-compose.yml אצלי הוא:
version: "3.9"
services:
server:
image: node:17
working_dir: /app
command: sleep infinity
env_file: ./env/dev.env
environment:
DB_HOST: db
secrets:
- postgres-passwd
volumes:
- ./server:/app
ports:
- "3000:3000"
query-script:
image: node:17
working_dir: /app
command: sleep infinity
env_file: ./env/dev.env
environment:
DB_HOST: db
volumes:
- ./query-script:/app
secrets:
- postgres-passwd
- weatherapi-key
db:
image: postgres:14.2
volumes:
- "./db:/docker-entrypoint-initdb.d"
secrets:
- postgres-passwd
env_file: ./env/dev.env
ports:
- "5432:5432"
secrets:
postgres-passwd:
file: ./secrets/postgres_password
weatherapi-key:
file: ./secrets/weather-apikey
בשלב הזה מריץ:
docker-compose up -d
ואחרי שעולים הקונטיינרים מריץ:
docker-compose exec server /bin/bash
ובפנים:
אלו פרטי הגרסאות שאני עובד איתן במחשב שלי:
OS: Windows 11 Pro, Version 21H2
Terminal (bash): Ubuntu 20.04.4 LTS
Docker Desktop 4.7.1
Docker version 20.10.14
Docker Compose version v2.4.1
בנוסף לתגובה מעל @ynonp, דחפתי ל-github שלי (fork מהמאגר שלך) ענף בשם ch11-dev המחיל תקייה בשם new צחת פרק 11 עם המצב הסופי - פרויקט עובד, אבל ה-nodemon לא מעדכון אוטומטית בשינויים
הי לקחתי אליי את הפרויקט שלך והרצתי והכל עבד. כלומר בלוג ראיתי את ההודעות:
new-server-1 | [nodemon] watching path(s): *.*
new-server-1 | [nodemon] watching extensions: js,mjs,json
new-server-1 | [nodemon] starting `node bin/www`
new-server-1 | GET / 304 438.144 ms - -
new-server-1 | [nodemon] restarting due to changes...
new-server-1 | [nodemon] starting `node bin/www`
מה שמעלה את החשד שמשהו לא תואם בהתקנות.
כן ראיתי שאתה מפעיל docker-compose
. זה לא אותו דבר כמו docker compose
(רווח במקום המקף). אצלי שני הכלים עבדו אבל ראיתי מצבים בהם רק הכלי docker compose
עובד, כי הוא החדש יותר. תוכל לנסות עם docker compose up
, כלומר רווח במקום המקף, ולראות אם זה משפר את המצב?
אפשר לראות גם צילום מסך של הפעלת הפקודה docker compose up
? לא ראיתי את זה בתמונות שצירפת
לא הייתי מודע ש docker-compose ו: docker compose קוראים לתוכנות שונות, אבל לצערי גם כשאני מעלה את הקונטיינרים בכלי docker compose עדיין נצפת אותה התנהגות (nodemon לא מאתחל כשר יש שינוי בקבצים).
להלן צילומי מסך של פלט docker compose up
(השורה האחרונה לאחר כניסה בדפדפן אל http://localhost:3000
)
הפלט הנ"ל לא השתנה גם אחרי עדכון קובץ: server/routes/index.js
אחרי כניסה נוספת בדפדפן אל http://localhost:3000
מקבלים 304 ללא שינוי:
בוא ננסה עוד משהו. יש לנודמון מצב legacy שמתמודד עם סביבות בעייתיות. תוכל נסות להחליף את פקודת ה nodemon ב:
nodemon --legacy-watch bin/www
וספר אם זה עובד?
היי @ynonp, עכשיו nodemon מתנהג כצפוי:
וכדי להיות בטוח שהבעייה המקורית קיימת, הורדתי את הקונטיינרים, מחקתי רק את --legacy-watch
, הרמתי שוב, שיניתי את אותו קובץ כמו קודם (routes/index.js) ושוב nodemon לא מאתחל.
אז עובד כצתופםה עם legacy-watch, אבל זה לא מסביר מה הבעייה. או שאתה הצלחת להבין?
וגם אם הנ"ל לא קשור לבעיות עם מיפוי הווליום, עדיין יותר חשוב (עבורי) למה יש בעיות הרשאות ואי אפשר להתקין עם express-generator (ואני מניח עם כלים דומים) בתוך קונטיינר - כי בהחלט מעוניין לעבוד עם קונטיינרים כדי לפתח בשפות וכלים שונים.
הי אוקיי אז טוב שהצלחנו למצוא את הבעיה עם ה nodemon, או לפחות למצוא דרך לגרום לו לעבוד. הבעיה בגדול היא שמערכת ההפעלה אצלך לא מעבירה אירועי גישה למערכת קבצים לדוקר. אני רואה שהפרויקט שלך שמור על תיקיית C כלומר במערכת הקבצים של Windows ולא של ה WSL אז יכול להיות שאתה לא עובד עד הסוף כמו שצריך עם ה WSL.
נסה מ cmd רגיל להפעיל את הפקודה:
wsl --list
וספר לי מה זה מדפיס לך
עלית על הבעייה! מסתבר שזו אכן הייתה סוג-של בעיית הרשאות.
חשבתי שיהיה לי יותר נוח לעבוד עם תקייה שכבר ייצרתי מראש לקורס במערכת ההפעלה של חלונות, לכן את הפעולות בצעתי שם גם מתוך ה-WSL. עכשיו פשוט עשיתי clone לדוגמאות הקורס בתוך ה-WSL ubuntu והכל עובד.
אגב, במצב הזה אצלי הוא כן מאפשר לעבוד ישירות בתיקיית app מתוך הקונטיינר (ולא חייב אותי ליצור תת תיקייה).
תודה על העזרה!