THẢO LUẬN

thg 12 28, 2019 9:02 SA

mình thử thì thấy sau khi dùng option -p 443:443 truy cập vào nginx vẫn được, cái này mình sai. Vì option publish sẽ thực hiện expose ẩn nếu trong dockerfile chưa expose, và vì thế nên bạn cũng sai khi khẳng định webserver không cần expose, vì nó đã không listen port đó thì forward port vào cũng chẳng được gì.

Bạn có thể xem ở đây (phần ps), vì nó không có trong doc https://stackoverflow.com/a/22150099 Nếu đúng như doc viết thì -p chỉ thực hiện forward port, nên đừng lôi mấy dòng tiếng anh đọc không hiểu ra

Còn tranh luận bình thường bạn đừng lôi giọng đó vào, mình đọc thấy chán luôn, cũng chẳng muốn tranh luận với bạn tại sao vendor trong container sẽ không bị mất nữa.

0
thg 12 28, 2019 7:38 SA

Chào Huy,

Sorry bạn mình viết thiếu một bước, không biết sao lúc viết bài đầu óc mình lại thế nào 😄

Mình đã sửa lại trong bài mục Chạy Project, bạn có thể đọc lí do ở đó nhé

Cách fix nhanh cho bạn, bạn chạy command sau là được nhé:

docker run --rm -v $(pwd):/app -w /app node npm install

Sau đó khởi động lại project bằng cách chạy docker-compose down/up

Hi vọng giúp được bạn 😃

0
thg 12 28, 2019 7:23 SA

Chào bạn,

Vấn đề của bạn là thế này:

  • Mặc dù bạn đã chạy npm install ở Dockerfile, nhưng vì khi chạy ở file docker-compose.yml bạn lại mount volume từ folder ngoài vào trong, nên toàn bộ các file ở đường dẫn /app trong container lúc chạy sẽ bị thay thế bởi các file ở foldẻ ngoài của bạn
  • Nhưng ở folder ngoài của bạn thì lại không hề có node_modules

Vậy cách giải quyết vấn đề này là gì?

Bạn chỉ cần comment bỏ dòng mount volumes ở file docker-compose là chạy được, nhưng vì bạn cần phải có đoạn mount volumes đó để có thể sửa code ở bên ngoài bên trong thay đổi trực tiếp.

Nên vậy cách giải quyết cuối cùng cho trường hợp của bạn để khi người khác lấy project của bạn và có thể chạy được là:

  • Ở folder bên ngoài bạn chạy cho mình command sau:
docker run --rm -v $(pwd):/app -w /app node npm install
  • Command trên sẽ tạo trực tiếp folder node_modules ở môi trường ngoài dùng 1 container tạm thời
  • Sau đó chạy docker-compose up là chạy bình thường nhé

Hi vọng có thể giúp được bạn

0
thg 12 28, 2019 6:43 SA

mình mới phát hiện ra vấn đề là file .htaccess này không hoạt động được trên nginx chính xác hơn đó là " Nginx does not support .htaccess files. " 😦

0
thg 12 28, 2019 6:22 SA

Dear Chung,

  • Cho mình hỏi khi mình lấy về làm step by step thì khi docker-compose up, cái app nó báo lỗi và exit luôn. Log báo là không tìm thấy nodemon 11.png
  • Có liên quan gì tới npm install trong Dockerfile không nhé. Vì khi chạy mình không thấy sinh ra node_modules.

Cảm ơn Chung

0
thg 12 28, 2019 5:37 SA

Cảm ơn bạn đã ủng hộ, sắp tới mình sẽ viết nhiều bài viết hơn nữa.

0
thg 12 28, 2019 4:52 SA

Ở file docker-compose service webserver e đã map port chưa e? Địa chỉ e truy cập cũng phải có port nhé, ví dụ: 192.168.99.105:8000

Nếu vẫn không đc thì e đã chạy đc ở localhost thành công chưa (localhost ok thì hẵng chuyển qua chạy trên ip xem thế nào nhé e)

0
Avatar
đã bình luận câu trả lời trong câu hỏi
thg 12 28, 2019 3:27 SA

@quankm1097 mình test thừ không được bạn ơi, nó không ngăn được sự kiện và vẫn bị reload lại page

0
thg 12 28, 2019 3:22 SA

Screen Shot 2019-12-28 at 10.16.45.png

E thử build rồi up lên nhưng truy cập không được ạ. E chạy trên host 192.168.99.105

Screen Shot 2019-12-28 at 10.44.02.png

+1

hay quá bạn ơi!!

0
thg 12 27, 2019 4:57 CH

😍 hay quá. Thanks bác

0
thg 12 27, 2019 12:28 CH

Combinelatest chứ k có combinelastest nha bạn.

0
thg 12 27, 2019 12:16 CH

Mình đã nghĩ đoạn document từ trang chủ của Docker đã làm bạn hiểu nhưng vì bạn vẫn khăng khăng nên mình đã tự tay trực tiếp build lại Image từ trang cung cấp docker image official. Image của mình ở đây https://gist.github.com/maitrungduc1410/7487cf5eff7a2595921aca2c4b240267. Ở image này mình KHÔNG CẦN EXPOSE cổng 80 vẫn có thể map port từ bên ngoài và chạy bình thường nhé

Còn việc bạn không chạy được ở cổng 443, khá nhiều lí do có thể gây ra lỗi (ở localhost thì không có HTTPS, hoặc khi bạn deploy ở VPS nhưng certificate của bạn ko hợp lệ chẳng hạn,...), nên ngay cả khi bạn expose và thậm chí map cả port cũng không chạy được.

Về câu hỏi thứ nhất này của bạn nếu sau khi mình đã giải thích và làm hẳn demo cho bạn nhưng bạn vẫn bảo vệ quan điểm của mình thì mình xin được không tranh luận về điều này nữa!

Còn câu thứ 2, trong bài câu đó ở phần câu hỏi liên quan tới những gì mình làm trong bài, mọi thứ vẫn chạy bình thường ổn định, mình vẫn dùng cách đó và phần đó mình cũng đã nói rõ là ở trong bài này , một phần mềm có hàng tỉ cách tiếp cận, mình không thể nói hết được từng cách, còn vì trong bài mình mount từ môi trường gốc vào cả image Laravel và image Nginx do đó mình khuyên bạn đọc không nên chạy composer vì khi chạy thì folder vendor sẽ bị mất do môi trường ngoài không có.

Và cả sau câu 2 này nếu vẫn chưa làm bạn hài lòng thì mình cũng xin không tranh luận dài dòng nữa 😃

0
thg 12 27, 2019 10:50 SA
  • bạn hãy xem ở đây https://github.com/nginxinc/docker-nginx, nó đã expose sẵn port 80, còn bạn muốn check điều mình nois không thể map port nếu không expose thì bạn thử map port 443:443 mà không expose trong dockerfile xem, dùng docker cli nhé đừng dùng ports của docker-compose vì nó expose và mapping trong cùng khai báo đó.
  • cái thứ 2 mình muốn chỉ ra là việc bạn nói không nên chạy composer install trong dockerfile là sai, mình vẫn đang dùng và ENTRYPOINT sinh ra để làm việc như thế, build container bằng câu lệnh, và nó sẽ chạy sau khi mount volume hoàn thành.

Check lại nhé !

+1
Avatar
đã bình luận câu trả lời trong câu hỏi
thg 12 27, 2019 10:48 SA

tks bạn, để tối về mình check lại nhé

0
Avatar
đã bình luận câu trả lời trong câu hỏi
thg 12 27, 2019 9:57 SA

Trước em cũng gặp trường hợp này rồi nên em biết bác ạ =))

0

cho mình hỏi công thức tính p của hackernew như nào nhỉ? TH upvote=0 và downvote=0 thì sẽ tính như nào? Thanks all

0
thg 12 27, 2019 7:27 SA

1 like cho chủ thớt 😄

0
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí