Tấn Phát Digital

Docker Run To Compose Online - Chuyển Lệnh docker run Sang docker-compose.yml

Dán một hay nhiều lệnh docker run, công cụ tách cờ như shell và sinh docker-compose.yml theo Compose Specification (không còn dòng version), khai báo sẵn volume và network, liệt kê rõ cờ nào không chuyển được.

Lệnh docker run

Mỗi dòng một lệnh; nối dòng bằng \ (bash), ^ (cmd) hoặc ` (PowerShell). Lệnh docker network create, docker volume create cũng được đọc để khai báo mạng và volume.

docker-compose.yml
Báo cáo chuyển đổi
  • Dấu $ nằm trong nháy đơn hoặc đã escape được ghi thành $$, vì Compose coi $ là biến môi trường.

Service pg (postgres:16)

  • -d (chạy nền) bỏ qua: dùng “docker compose up -d” để chạy nền.

Muốn dựng file Compose từ đầu cho MySQL, Redis, MongoDB bằng biểu mẫu? Dùng Docker Compose Generator.

Hợp tác ngay với Tấn Phát Digital

Chúng tôi không chỉ thiết kế website, mà còn giúp doanh nghiệp xây dựng thương hiệu số mạnh mẽ. Cung cấp dịch vụ thiết kế website trọn gói từ thiết kế đến tối ưu SEO. Hãy liên hệ ngay với Tấn Phát Digital để cùng tạo nên những giải pháp công nghệ đột phá, hiệu quả và bền vững cho doanh nghiệp của bạn tại Hồ Chí Minh.

Chuyển docker run sang docker-compose.yml mà không bỏ sót cờ nào

Công cụ docker run to compose online này đọc lệnh docker run bạn chép từ README, tài liệu hay lịch sử terminal, tách đối số đúng như shell, rồi sinh file docker-compose.yml theo Compose Specification hiện hành. Cổng, volume, biến môi trường, healthcheck, giới hạn RAM và CPU được chuyển sang đúng khóa tương ứng; cờ nào không có tương đương trong Compose được liệt kê rõ thay vì lặng lẽ bỏ đi.

Tính năng nổi bật

  • Tách lệnh như shell: nháy đơn, nháy kép, nối dòng bằng \ (bash), ^ (cmd) và ` (PowerShell), gộp cờ ngắn như -dit, -p80:80
  • Nhiều lệnh docker run cùng lúc thành nhiều service; đọc cả docker network create và docker volume create để khai báo sẵn
  • Cổng dạng 8080:80, 127.0.0.1:5432:5432, dải cổng và giao thức /udp; luôn đặt trong nháy kép để YAML không hiểu nhầm
  • Volume: bind mount, named volume (tự khai báo ở mục volumes cấp cao nhất), volume ẩn danh, --mount dạng đầy đủ, tmpfs, đường dẫn Windows
  • Biến môi trường -e, --env-file; dấu $ trong nháy đơn được ghi thành $$ để Compose không hiểu là biến
  • --memory, --cpus sang deploy.resources.limits hoặc mem_limit, cpus; --gpus sang reservations.devices
  • --health-cmd và các cờ --health-* sang healthcheck; --log-driver, --log-opt sang logging; --restart, --network, --cap-add, --device, --label, --ulimit, --sysctl...
  • Bộ sinh YAML riêng, tự đặt nháy kép cho giá trị dễ bị hiểu sai như no, yes, on, 22:22, 0012; báo cáo từng cờ bị bỏ qua hoặc không chuyển được

Vì sao nên chuyển docker run sang Compose, và vì sao làm tay dễ sai

Một lệnh docker run dài hai mươi cờ rất khó đọc lại, khó sửa và dễ mất khi chuyển máy. Đưa vào docker-compose.yml, cấu hình được lưu trong một file, quản lý bằng Git, khởi động lại chỉ với docker compose up -d. Nhưng chuyển tay có nhiều bẫy: restart: no không đặt trong nháy bị YAML hiểu thành false và Compose báo lỗi; cổng 22:22 không đặt nháy bị YAML 1.1 hiểu là số cơ số 60; mật khẩu có dấu $ trong nháy đơn ở shell là ký tự thật nhưng trong Compose lại thành biến rỗng; volume đặt tên phải khai báo thêm ở cấp cao nhất; -d, --rm không có chỗ trong file Compose. Công cụ xử lý các chi tiết đó và nói rõ những gì cần bạn quyết định.

Lợi ích khi sử dụng

  • Lưu cấu hình container thành file, quản lý phiên bản bằng Git thay vì nhớ lệnh dài
  • Tránh lỗi YAML khó thấy như restart: no thành false hay cổng 22:22 thành số
  • Không mất dữ liệu vì quên khai báo named volume khi chuyển sang Compose
  • Biết chính xác cờ nào không chuyển được thay vì phát hiện khi container chạy sai
  • Gộp nhiều container liên quan (web, cơ sở dữ liệu, cache) thành một file khởi động cùng lúc
  • Lệnh có mật khẩu, token không bị gửi đi đâu vì mọi xử lý chạy trong trình duyệt

Cách chuyển lệnh docker run sang docker-compose.yml

  1. 1Dán một hoặc nhiều lệnh docker run vào ô bên trái, mỗi lệnh một dòng hoặc nối dòng bằng dấu \. Có thể bấm các nút Mẫu để xem ví dụ Nginx, PostgreSQL, Portainer.
  2. 2Chọn cách ghi giới hạn tài nguyên: deploy.resources theo chuẩn Compose, hoặc mem_limit và cpus ngắn gọn.
  3. 3Đọc file docker-compose.yml ở ô bên phải, cập nhật ngay khi bạn sửa lệnh.
  4. 4Xem Báo cáo chuyển đổi: cờ bị bỏ qua (như -d, --rm) và cờ không chuyển được, cần xử lý tay.
  5. 5Bấm Sao chép hoặc Tải docker-compose.yml, đặt vào thư mục dự án rồi chạy docker compose up -d.

Ví dụ: Nginx và Portainer

Lệnh docker run -d --name web -p 8080:80 -v ./html:/usr/share/nginx/html:ro --restart unless-stopped nginx:1.27-alpine được chuyển thành service web với image: nginx:1.27-alpine, container_name: web, restart: unless-stopped, ports là "8080:80" và volumes là ./html:/usr/share/nginx/html:ro. Cờ -d được ghi trong báo cáo là bỏ qua, vì chạy nền là việc của lệnh docker compose up -d. Với lệnh cài Portainer có -v portainer_data:/data, công cụ nhận ra portainer_data là named volume (không có dấu / hay dấu chấm ở đầu) nên thêm mục volumes: portainer_data: ở cấp cao nhất; thiếu dòng này, docker compose sẽ báo lỗi volume chưa được khai báo.

Bảng tương ứng các cờ docker run phổ biến

--name thành container_name và tên service; -p, --publish thành ports; --expose thành expose; -v, --volume và --mount thành volumes; --tmpfs thành tmpfs; -e, --env thành environment; --env-file thành env_file; --restart thành restart; --network thành networks hoặc network_mode (host, none, bridge, container:tên); --network-alias và --ip thành aliases, ipv4_address; -h, --hostname thành hostname; -w, --workdir thành working_dir; -u, --user thành user; --entrypoint thành entrypoint; phần sau tên image thành command dạng danh sách; --cap-add, --cap-drop, --device, --label, --log-driver, --log-opt, --ulimit, --sysctl, --security-opt, --add-host, --dns, --privileged, --read-only, --init, --pid, --ipc, --shm-size, --stop-timeout có khóa tương ứng; -i và -t thành stdin_open và tty; --health-cmd thành healthcheck với test dạng CMD-SHELL.

Giới hạn RAM, CPU: deploy.resources hay mem_limit

Compose Specification đặt giới hạn tài nguyên trong deploy.resources.limits (memory, cpus) và deploy.resources.reservations; Docker Compose v2 áp dụng các giá trị này cả khi không dùng Swarm. Các khóa mem_limit, mem_reservation, cpus ở cấp service cũng hợp lệ và ngắn hơn, nhưng không nên dùng lẫn với deploy.resources cho cùng một giới hạn. Công cụ để bạn chọn một trong hai kiểu. Riêng --gpus luôn được ghi vào deploy.resources.reservations.devices với driver nvidia và capabilities gpu, vì đó là cách Compose khai báo GPU. Các cờ như --memory-swap, --cpu-shares, --cpuset-cpus, --pids-limit được chuyển sang memswap_limit, cpu_shares, cpuset, pids_limit.

Dấu $, nháy và nối dòng: vì sao cần tách lệnh như shell

Công cụ không tách lệnh theo dấu cách đơn giản mà theo quy tắc của bash: nội dung trong nháy đơn giữ nguyên, trong nháy kép cho phép escape \" \$ \\, dấu \ cuối dòng nối dòng. Lệnh chép từ tài liệu Windows dùng ^ (cmd) hoặc ` (PowerShell) để nối dòng cũng được nhận ra, khi đó dấu \ trong đường dẫn C:\data được giữ nguyên. Điểm quan trọng là dấu $: trong shell, -e 'PASS=p@ss$word' là ký tự $ thật; nhưng Compose coi mọi $ trong file là biến môi trường, nên công cụ ghi thành p@ss$$word để giữ đúng giá trị. Còn $VAR không nằm trong nháy đơn được giữ là biến, Compose sẽ lấy từ môi trường hoặc file .env khi chạy. $(pwd) ở đầu đường dẫn volume được đổi thành dấu chấm vì Compose tính đường dẫn tương đối theo thư mục chứa file.

Mạng: external, network_mode và gọi nhau bằng tên

docker run --network ten_mang yêu cầu mạng đã được tạo sẵn, nên công cụ khai báo mạng đó với external: true ở cấp cao nhất để Compose dùng lại đúng mạng cũ. Nếu trong ô nhập có lệnh docker network create ten_mang, công cụ hiểu bạn muốn Compose tự tạo và khai báo mạng bình thường. --network host, none, bridge thành network_mode. --network container:ten thành network_mode: service:ten nếu container đó cũng nằm trong danh sách chuyển đổi. Lưu ý Compose mặc định tạo một mạng riêng cho cả dự án và các service gọi nhau được bằng tên service, nên --link là không cần thiết; nếu giữ network_mode: bridge thì sẽ mất khả năng này.

Cờ bị bỏ qua và cờ không chuyển được

Một số cờ chỉ có ý nghĩa với lệnh docker run nên được bỏ qua kèm giải thích: -d (dùng docker compose up -d), --rm (Compose không tự xóa container khi dừng), -a, --sig-proxy, --detach-keys, --cidfile. Một số cờ không có khóa tương đương trong Compose Specification, ví dụ -P (mở ngẫu nhiên mọi cổng EXPOSE), --blkio-weight-device, --device-read-bps, --label-file, các tùy chọn lạ của --mount; chúng được liệt kê ở mục Không chuyển được để bạn tự quyết định. Cờ công cụ không nhận ra được coi là cờ không nhận giá trị và có cảnh báo kiểm tra lại tên image, vì nếu cờ đó thực ra có giá trị thì giá trị sẽ bị hiểu nhầm là image.

Giới hạn của công cụ

Công cụ không chạy lệnh, không kết nối Docker và không kiểm tra image có tồn tại. Biến và lệnh con của shell như $HOME, $(date) không được thực thi mà giữ nguyên dạng biến. Mỗi dòng không nối được xem là một lệnh riêng; lệnh không phải docker run, docker create, docker network create hay docker volume create bị bỏ qua. Tên service được đặt từ --name, nếu không có thì từ tên image, trùng thì thêm số. File sinh ra theo Compose Specification, không có khóa version đã lỗi thời; một số khóa mới như annotations cần Docker Compose bản gần đây. Hãy chạy docker compose config để kiểm tra lại trên máy của bạn trước khi dùng cho môi trường thật.

Câu hỏi thường gặp (FAQ)

Có cần dòng version: "3.8" ở đầu file không?

Không. Compose Specification đã bỏ khóa version, Docker Compose v2 bỏ qua và cảnh báo nếu có. Công cụ không thêm dòng này.

Tôi dán nhiều lệnh docker run thì sao?

Mỗi lệnh thành một service trong cùng file. Named volume và mạng dùng chung được khai báo một lần ở cấp cao nhất. Tên service lấy từ --name hoặc tên image, trùng nhau thì thêm hậu tố -2, -3.

Vì sao restart: "no" lại có nháy kép?

Vì trong YAML, no không đặt nháy được hiểu là giá trị false, Compose sẽ báo lỗi kiểu dữ liệu. Công cụ tự đặt nháy kép cho các giá trị như no, yes, on, off, true, null.

Vì sao cổng luôn được đặt trong nháy kép?

Một số cặp cổng như 22:22 bị YAML 1.1 hiểu là số cơ số 60. Đặt nháy kép cho mọi cổng là khuyến nghị của tài liệu Docker và tránh hoàn toàn lỗi này.

Mật khẩu có dấu $ bị đổi thành $$ là sao?

Compose coi $ là bắt đầu biến môi trường. Nếu dấu $ trong lệnh gốc là ký tự thật (nằm trong nháy đơn hoặc đã escape), công cụ ghi thành $$ để Compose hiểu là một dấu $ thật, giá trị trong container vẫn đúng như khi chạy docker run.

Cờ -d và --rm đi đâu?

Chúng không có khóa tương ứng trong file Compose. Chạy nền bằng docker compose up -d; dọn container bằng docker compose down. Công cụ ghi rõ trong báo cáo là đã bỏ qua.

-it được chuyển thành gì?

-i thành stdin_open: true, -t thành tty: true. Hai khóa này cần cho container chạy shell tương tác hoặc ứng dụng cần terminal.

Nên chọn deploy.resources hay mem_limit?

deploy.resources là cách của Compose Specification và dùng được với cả Docker Compose lẫn Swarm. mem_limit, cpus ngắn gọn hơn và cũng được Docker Compose hỗ trợ. Chọn một kiểu và dùng thống nhất trong dự án.

Vì sao mạng lại có external: true?

Vì docker run --network yêu cầu mạng đã tồn tại. external: true bảo Compose dùng mạng có sẵn thay vì tạo mới. Nếu muốn Compose tự tạo, xóa dòng external hoặc thêm lệnh docker network create vào ô nhập.

Lệnh từ PowerShell hoặc cmd trên Windows có chuyển được không?

Có. Công cụ nhận ra nối dòng bằng ` (PowerShell) và ^ (cmd), khi đó dấu \ trong đường dẫn Windows như C:\data được giữ nguyên. %cd% ở đầu đường dẫn volume được đổi thành dấu chấm.

Công cụ có kiểm tra file sinh ra bằng Docker không?

Không, công cụ chạy trong trình duyệt và không kết nối Docker. Sau khi tải file, hãy chạy docker compose config trong thư mục dự án để Docker kiểm tra và in ra cấu hình cuối cùng.

Lệnh có chứa mật khẩu có bị gửi lên máy chủ không?

Không. Việc tách lệnh và sinh YAML đều chạy bằng JavaScript trong trình duyệt của bạn. Dù vậy, không nên lưu mật khẩu thật trực tiếp trong docker-compose.yml đưa lên Git; hãy chuyển sang file .env hoặc secrets.

Khác gì Docker Compose Generator?

Docker Compose Generator dựng file từ biểu mẫu với các mẫu dịch vụ có sẵn. Công cụ này chuyển đổi lệnh docker run bạn đã có, giữ đúng từng cờ trong lệnh.

Từ khóa liên quan

  • docker run to compose online
  • docker run to docker compose
  • chuyển docker run sang docker compose
  • convert docker run to docker-compose
  • docker run sang docker-compose.yml
  • tạo docker-compose từ lệnh docker run
  • docker compose converter
  • docker run to compose converter
  • docker run command to yaml
  • docker compose ports volumes environment
  • docker compose named volume
  • docker compose restart no
  • docker compose deploy resources limits
  • docker compose healthcheck
  • docker compose network external
  • docker compose không cần version
  • docker compose dollar sign
  • portainer docker compose
  • postgres docker compose
  • docker compose cho người mới

Công cụ Developer Tools liên quan

.env Generator

Tạo file .env và .env.example cho dự án.

.gitignore Generator

Tạo .gitignore cho Node.js, Python, Java.

API Mock Generator

Tạo mock JSON data cho API testing.

API Response Formatter

Format và phân tích API response.

API Tester

Test REST API: GET, POST, PUT, DELETE.

Postman Alternative - API Testing Tool Online với Collections, Environment & File Upload

Postman Alternative miễn phí - Test APIs với Collections, Multiple Environments, Pre-request Scripts, Collection Runner, File Upload (form-data), Tests/Assertions, Code Generation (cURL, JS, Python, Node.js). Browser-based, không cần cài đặt. Save requests, export/import collections, auto-save history. Hỗ trợ Bearer Token, Basic Auth, API Key. Hoàn hảo cho API development và testing.

Swagger API Tester - Test API với OpenAPI/Swagger Spec & Authentication Online

Swagger API Tester miễn phí - Import OpenAPI/Swagger specification và test API endpoints với đầy đủ authentication (Bearer Token/JWT, Basic Auth, API Key). Hỗ trợ OpenAPI 3.0, Swagger 2.0, auto-parse endpoints, parameters, request body. Giao diện như Swagger UI với color-coded methods, grouped endpoints, real-time testing. Hoàn hảo cho API development, testing, debugging secured APIs.

Base Converter

Chuyển đổi Binary, Hex, Base32.

Base64 Encoder

Mã hóa/giải mã Base64.

Binary Converter

Chuyển đổi Decimal, Binary, Hex.

Box Shadow Generator

Tạo CSS box-shadow trực quan.

Chmod Calculator

Tính quyền file Linux.

Dịch vụ của Tấn Phát Digital

Đang xây sản phẩm và cần thêm người làm phần nặng?

Gói giải pháp doanh nghiệp

Nền tảng custom cho ngân hàng, y tế và sàn B2B, chuẩn ISO 27001, GDPR, PCI-DSS, SLA 99.99%.

Từ 50.000.000đXem chi tiết →

Dịch vụ phát triển Blockchain & Web3

Smart contract, dApp và NFT marketplace đa chuỗi, audit bảo mật đầy đủ trước khi lên mainnet.

Từ 50.000.000đXem chi tiết →

Dịch vụ thiết kế website tại Hồ Chí Minh

Website doanh nghiệp, bán hàng và đặt lịch, chuẩn SEO ngay từ cấu trúc, tốc độ tải dưới 3 giây.

Từ 5.000.000đXem chi tiết →

Dịch vụ thiết kế landing page

Trang đích riêng cho từng chiến dịch quảng cáo, tỷ lệ chuyển đổi 3–8%, bàn giao trong 5–21 ngày.

Từ 3.000.000đXem chi tiết →

Tư vấn và báo giá miễn phí trong 24 giờ. Xem toàn bộ dịch vụ

Zalo
Facebook
TAN PHAT DIGITAL
Zalo
Facebook