aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
SAVED POSTS
aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
aedev.net
No Result
View All Result
Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

Docker WORKDIR tương đối: khi base image đổi, lệnh chạy ở đâu?

Suong Nguyen by Suong Nguyen
12/11/2026
in DevOps
0
585
SHARES
3.2k
VIEWS
Summarize with ChatGPTShare to Facebook

Một Dockerfile có dòng WORKDIR service. Người đọc nghĩ các lệnh sau chạy ở /service, nhưng image cha có thể đã đặt thư mục làm việc khác. Khi đổi image cha, đường dẫn tương đối vẫn hợp lệ và build có thể đi tiếp, chỉ có điều file được đặt vào một vị trí mà người vận hành không dự kiến.

Xác định điểm bắt đầu

Tài liệu Dockerfile và build check WorkdirRelativePath được đối chiếu ngày 12/11/2026. Đường dẫn tương đối nối vào thư mục làm việc đang có; đường dẫn tuyệt đối đặt lại vị trí. Nếu dùng image bên ngoài, hãy chọn một đường dẫn tuyệt đối đầu tiên mà bạn kiểm soát. Phần sau có thể dùng đường dẫn tương đối có chủ đích, miễn điểm bắt đầu rõ ràng.

FROM busybox:1.37 AS base
WORKDIR /parent

FROM base AS inherited
WORKDIR service
RUN test "$(pwd)" = /parent/service

FROM base AS explicit
WORKDIR /service
RUN test "$(pwd)" = /service

Hai stage cùng lấy một base nhưng có hợp đồng đường dẫn khác nhau. Stage inherited đi xuống một cấp từ /parent, còn explicit đặt lại thành /service. Kết quả được ghi trong điều kiện test là kỳ vọng theo tài liệu; chưa build image hoặc kéo tag trong lượt biên tập. Khi dùng thật, xác minh tag và chọn digest theo chính sách của dự án.

Cách kiểm tra trên máy có Docker

Lưu vào Dockerfile trong thư mục thử, rồi build riêng từng target để cả hai điều kiện được thực thi. Khi build chỉ target cuối, các stage độc lập không cần cho target đó có thể không chạy, vì vậy không lấy một kết quả thành công làm bằng chứng cho cả hai.

docker build --target inherited -t aedev-workdir-inherited .
docker build --target explicit -t aedev-workdir-explicit .

Nếu test sai, đọc giá trị WORKDIR ở stage hiện tại và ở base trước khi đổi đường dẫn trong từng RUN. Trong repo thật, xem thêm đích COPY tương đối và đường dẫn đọc cấu hình khi chạy. Chúng có thể phụ thuộc cùng một vị trí dù phần lệnh nhìn qua không có đường dẫn tuyệt đối.

Lỗi thường gặp và cách review

Một lệnh RUN cd chỉ thay đổi thư mục trong tiến trình chạy lệnh đó. Nếu muốn các chỉ dẫn sau có chung điểm bắt đầu, khai báo WORKDIR ngay tại stage cần dùng. Đừng trông chờ thư mục trong stage không phải base của bạn truyền sang stage khác.

Dấu ngã trong WORKDIR cũng không được mở rộng theo shell như nhiều người quen dùng ở terminal. Khi đọc Dockerfile, nhìn slash đầu tiên và truy ngược base thay vì suy ra từ lệnh shell tương tự. Tách kiểm tra đường dẫn khỏi kiểm tra nội dung: đúng thư mục không chứng minh file cần thiết đã được COPY đúng.

Kết luận

Chọn đường dẫn tuyệt đối đầu tiên cho stage có hợp đồng file rõ ràng. Sau khi thay base, dùng assertion ở build thử để xác nhận vị trí, không chỉ nhìn build có báo thành công hay không.

Nguồn tham khảo

  • Dockerfile: WORKDIR
  • Docker Build: WorkdirRelativePath
  • Docker Official Images: danh sách tag BusyBox

Tags: BuildDockerDockerfile
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

GitHub Actions: working-directory cho từng step và vì sao cd không được giữ

by Suong Nguyen
11/11/2026
0

Tổ chức working-directory trong workflow nhiều thư mục, kiểm tra đường dẫn và tránh hiểu nhầm cd sẽ tồn tại sang step sau.

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

GitHub Actions matrix: fail-fast false giữ các lượt kiểm tra, không bỏ qua lỗi

by Suong Nguyen
10/11/2026
0

Tách việc hủy các job còn lại trong matrix khỏi việc cho phép một job lỗi, với workflow ba shard và script có kết quả kiểm tra rõ...

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

Bash wrapper: dùng “$@” để giữ nguyên từng đối số khi gọi lệnh

by Suong Nguyen
09/11/2026
0

Kiểm tra wrapper Bash với đường dẫn có khoảng trắng, chuỗi rỗng và ký tự sao để thấy khác biệt giữa "$@", "$*" và $@ không quote.

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

GitHub Actions: truyền giá trị từ step sang job bằng GITHUB_OUTPUT

by Suong Nguyen
08/11/2026
0

Nối đúng ba tầng step output, job output và needs để job sau đọc được giá trị do một bước trước tạo ra.

Next Post
Minh họa phát triển ứng dụng mobile đa nền tảng với Flutter

Flutter Offstage và TickerMode: ẩn widget chưa đủ để ngừng ticker

0 0 votes
Article Rating
Subscribe
Login
Notify of
guest
guest
0 Comments
Oldest
Newest Most Voted
AE Dev

AE Dev mang đến các bài viết về lập trình, mobile app, backend, frontend, WordPress và công nghệ, phù hợp cho developer muốn học hỏi và cập nhật kiến thức thực tế.

Recent Posts

  • React Native Keyboard.dismiss: đóng bàn phím mà vẫn giữ bản nháp
  • Map.get trả undefined: khóa không tồn tại hay đã lưu giá trị undefined?
  • Handler.removeCallbacks: giữ đúng Runnable để hủy tác vụ chờ

Categories

  • AI
  • Backend
  • Đánh giá
  • DevOps
  • Flutter
  • Hướng dẫn
  • Lập trình Mobile
  • Phỏng vấn
  • React Native
  • Uncategorized

Weekly Newsletter

  • Buy JNews
  • Support Forum
  • Pre-sale Question
  • Contact Us

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • Trang chủ
  • AI
  • Mobile
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
  • Flutter

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

wpDiscuz
0
0
Would love your thoughts, please comment.x
()
x
| Reply