Trong khi cố gắng gỡ lỗi một câu lệnh RUN trong Dockerfile của tôi, tôi đã cố chuyển hướng đầu ra tới một tệp có khối lượng giới hạn (./mongo/log
).Docker: RUN touch không tạo tập tin
Tôi ngạc nhiên khi không thể tạo tệp qua lệnh RUN hoặc để kết nối đầu ra của lệnh khác thành tệp bằng cách sử dụng toán tử chuyển hướng/nối (>
, >>
). Tuy nhiên tôi đã có thể thực hiện nhiệm vụ đã nói bằng cách đăng nhập vào thùng chứa đang chạy qua docker exec -ti mycontainer /bin/sh
và phát lệnh từ đó.
Tại sao hành vi này lại xảy ra? Làm thế nào tôi có thể chạm vào tập tin trong đầu ra Dockerfile/chuyển hướng đến một tập tin hoặc giao diện điều khiển mà từ đó Dockerfile được chạy?
Đây là Dockerfile tôi:
FROM mongo:3.4
#Installing NodeJS
RUN apt-get update && \
apt-get install -y curl && \
curl -sL https://deb.nodesource.com/setup_6.x | bash - && \
apt-get install -y nodejs
#Setting Up Mongo
WORKDIR /var/www/smq
COPY ./mongo-setup.js mongo-setup.js
##for testing
RUN touch /var/log/node.log &&/
node --help 2>&1 > /var/log/node.log
##this was the command to debug
#RUN node mongo-setup.js > /var/log/mongo-setup.log 2> /var/log/mongo-setup.error.log
Dưới đây là một đoạn trích từ tôi Docker-compose.yml:
mongodb:
build:
context: ./
dockerfile: ./mongodb-dockerfile
container_name: smqmongodb
volumes:
- /var/lib/mongodb/data
- ./mongo/log/:/var/log/
- ../.config:/var/www/.config
Bạn nên đọc về các bước xây dựng bộ đệm đệm trung gian: https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/. Nó hoạt động chính xác vì nó được thiết kế để hoạt động - dường như bạn muốn nó hoạt động theo một cách khác. Mặc dù có thể nói docker không sử dụng bộ nhớ đệm (với '--no-cache = true', như bạn có thể tìm hiểu trong liên kết ở trên), tôi khuyên bạn nên xem lại cách tạo Dockerfile để nắm bắt và tận dụng khả năng bộ nhớ đệm. –
Đọc thú vị! Hãy để tôi cập nhật Dockerfile của tôi. Từ đọc nhanh của tôi nó dường như không giải quyết được vấn đề của tôi, phải không? –
@Phillipe - tham số tôi đã đề cập * nên * giải quyết vấn đề - nó sẽ vô hiệu hóa bộ nhớ đệm, do đó, "chạm" sẽ chạy trên mọi bản dựng. Nhưng có thể có những cách khác mà bạn có thể đạt được mục tiêu của mình mà không phải tắt bộ nhớ cache ... –