Điểm:0

Hệ thống tập tin được gắn với sshfs ném lỗi bên trong docker khi tạo liên kết tượng trưng

lá cờ us

thực tế là gì

Tôi có một máy chủ (EX42) và một hộp lưu trữ (BX21) đều được lưu trữ tại Hetzner. Trên máy chủ chạy phiên bản ngang hàng và tôi muốn lưu dữ liệu trên hộp lưu trữ. tôi đã cài đặt sshfs trên máy chủ gốc Debian 10 của tôi và gắn hộp lưu trữ: /etc/fstab:

<user>@<user>.your-storagebox.de:/data /peertube/data fuse.sshfs ssh_command=sshpass\040-f\040/peertube/sftp.pass\040ssh,uid=999,gid=999,allow_other ,disable_hardlink,transform_symlinks,reconnect,_netdev 0 0

Tôi đã gắn hệ thống tập tin với các tùy chọn sau liên quan đến liên kết tượng trưng:

-o vô hiệu hóa_hardlink
              link(2) sẽ trở lại với errno được đặt thành ENOSYS. liên kết cứng
              hiện không hoạt động hoàn hảo trên sshfs và điều này gây nhầm lẫn
              một số chương trình. Nếu điều đó xảy ra, hãy thử vô hiệu hóa các liên kết cứng
              với tùy chọn này.

-o biến đổi_symlink
              chuyển đổi các liên kết tượng trưng tuyệt đối thành tương đối

Sau đó, tôi khởi động Peertube bên trong docker và gắn thư mục vào vùng chứa này

 đồng đẳng:
    khối lượng:
    - nội dung:/ứng dụng/khách hàng/dist
    - /peertube/data/peertube:/data
    - /peertube/data/config:/config
    mạng:
    - mặc định

Vấn đề

Tôi chạy một phiên bản ngang hàng với docker và cố gắng cài đặt một plugin bằng lệnh này:
$: NODE_ENV=sản xuất NODE_CONFIG_DIR=/cấu hình plugin sợi: cài đặt -n chương trình bổ trợ ngang hàng
Đầu ra cho thấy có lỗi khi tạo liên kết tượng trưng

chạy sợi v1.22.17
...
29-03-2022 09:35:16.286 lỗi: Không thể cài đặt plugin peertube-plugin-chương, hãy xóa nó... {
  "lỗi": {
    "lỗi": {
      "stack": "Lỗi: Lệnh không thành công: yarn add [email protected]\nwarning pack.json: Không có trường giấy phép\nwarning Không có trường giấy phép\nlỗi Đã xảy ra lỗi không mong muốn: \"EIO: lỗi i/o , liên kết tượng trưng '../../../marked/bin/marked' -> '/data/plugins/node_modules/peertube-plugin-chapters/node_modules/.bin/marked'\".\n\n tại ChildProcess .exithandler (node:child_ process:399:12)\n tại ChildProcess.emit (node:events:526:28)\n tại ChildProcess.emit (node:domain:475:12)\n tại MaybeClose (node:internal/ child_ process:1092:16)\n tại Process.ChildProcess._handle.onexit (nút:internal/child_ process:302:5)",
      "message": "Lệnh không thành công: yarn add [email protected]\nwarning package.json: No license field\nwarning No license field\nerror Đã xảy ra lỗi không mong muốn: \"EIO: lỗi i/o, liên kết tượng trưng '../../../marked/bin/marked' -> '/data/plugins/node_modules/peertube-plugin-chapters/node_modules/.bin/marked'\".\n",
      "bị giết": sai,
      "mã": 1,
      "tín hiệu": không,
      "cmd": "sợi thêm [email protected]"
    },
    "stdout": "[1/4] Đang giải quyết gói...\n[2/4] Đang tìm nạp gói...\n[3/4] Liên kết phụ thuộc...\ninfo Nếu bạn cho rằng đây là lỗi, vui lòng mở báo cáo lỗi với thông tin được cung cấp trong \"/data/plugins/yarn-error.log\".\ninfo Truy cập https://yarnpkg.com/en/docs/cli/add để biết tài liệu về lệnh này.\n ",
    "stderr": "gói cảnh báo.json: Không có trường giấy phép\ncảnh báo Không có trường giấy phép\nlỗi Đã xảy ra lỗi không mong muốn: \"EIO: lỗi i/o, liên kết tượng trưng '../../../marked/bin/marked ' -> '/data/plugins/node_modules/peertube-plugin-chapters/node_modules/.bin/marked'\".\n"
  }
}
...
{
  err: Lỗi: Lệnh không thành công: yarn add [email protected]
  gói cảnh báo.json: Không có trường giấy phép
  cảnh báo Không có trường giấy phép
  lỗi Đã xảy ra lỗi không mong muốn: "EIO: lỗi i/o, liên kết tượng trưng '../../../marked/bin/marked' -> '/data/plugins/node_modules/peertube-plugin-chapters/node_modules/. thùng/được đánh dấu'".
  
      tại ChildProcess.exithandler (nút:child_ process:399:12)
      tại ChildProcess.emit (nút:sự kiện:526:28)
      tại ChildProcess.emit (nút:miền:475:12)
      tại có thểĐóng (nút:internal/child_ process:1092:16)
      tại Process.ChildProcess._handle.onexit (node:internal/child_ process:302:5) {
    bị giết: sai,
    mã số: 1,
    tín hiệu: không,
    cmd: 'sợi thêm [email protected]'
  },
  thiết bị xuất chuẩn: '[1/4] Đang giải quyết các gói...\n' +
    '[2/4] Đang tìm nạp gói...\n' +
    '[3/4] Liên kết phụ thuộc...\n' +
    'thông tin Nếu bạn cho rằng đây là lỗi, vui lòng mở báo cáo lỗi với thông tin được cung cấp trong "/data/plugins/yarn-error.log".\n' +
    'thông tin Truy cập https://yarnpkg.com/en/docs/cli/add để biết tài liệu về lệnh này.\n',
  thiết bị lỗi chuẩn: 'gói cảnh báo.json: Không có trường giấy phép\n' +
    'cảnh báo Không có trường giấy phép\n' +
    ` error Đã xảy ra lỗi không mong muốn: "EIO: lỗi i/o, liên kết tượng trưng '../../../marked/bin/marked' -> '/data/plugins/node_modules/peertube-plugin-chapters/node_modules/ .bin/đã đánh dấu'".\n`
}
lỗi Lệnh không thành công với mã thoát 255.

Nhưng khi tôi nhìn vào bên trong thư mục đó, tôi có thể thấy liên kết tượng trưng đã được tạo và hoạt động

$: ls -la /data/plugins/node_modules/peertube-plugin-chapters/node_modules/.bin/
tổng số 12
drwxr-xr-x 1 peertube peertube 3 ngày 29 tháng 3 09:35 .
drwxr-xr-x 1 peertube peertube 3 Ngày 29 tháng 3 09:35 ..
lrwxr-xr-x 1 peertube peertube 26 ngày 29 tháng 3 09:35 được đánh dấu -> ../../../marked/bin/marked

$: mèo /data/plugins/node_modules/peertube-plugin-chapters/node_modules/.bin/marked  
#!/usr/bin/env nút

/**
 * Đánh dấu CLI
 * Bản quyền (c) 2011-2013, Christopher Jeffrey (Giấy phép MIT)
 */

const fs = yêu cầu('fs'),
  đường dẫn = yêu cầu ('đường dẫn'),
  đánh dấu = yêu cầu('../');

/**
 * Trang người đàn ông
 */

chức năng trợ giúp() {
  const spawn = require('child_ process').spawn;

  tùy chọn const = {
    cwd: process.cwd(),
    env: process.env,
....

Vì vậy, tôi đã tự mình thử nó bên trong vùng chứa bằng cách tạo một tệp, liên kết tượng trưng và sửa đổi nó

$: tiếng vang "Xin chào" > /data/plugins/hello 
$: mèo/dữ liệu/plugin/xin chào 
Xin chào

----

$: ln -s /data/plugins/hello /data/plugins/hello_link
ln: không thể tạo liên kết tượng trưng '/data/plugins/hello_link': Lỗi đầu vào/đầu ra

----

$: mèo/dữ liệu/plugin/hello_link 
Xin chào

----

$: tiếng vang "Thế giới" >> /data/plugins/hello_link 

----

$: mèo/dữ liệu/plugin/xin chào
Xin chào
Thế giới

----

$: ls -la/dữ liệu/plugin/
tổng cộng 40
drwxr-xr-x 1 peertube peertube 10 ngày 29 tháng 3 09:38 .
drwxr-xr-x 1 đồng đẳng đồng đẳng 16 ngày 29 tháng 3 06:32 ..
drwxr-xr-x 1 peertube peertube 2 ngày 28 tháng 3 16:48 .DAV
drwxr-xr-x 1 peertube peertube 3 ngày 28 tháng 3 16:48 dữ liệu
-rw-r--r-- 1 peertube peertube 12 Mar 29 09:38 xin chào
lrwxr-xr-x 1 peertube peertube 5 ngày 29 tháng 3 09:38 hello_link -> xin chào
drwxr-xr-x 1 peertube peertube 6 ngày 29 tháng 3 06:35 node_modules
-rw-r--r-- 1 peertube peertube 76 ngày 28 tháng 3 16:48 pack.json
-rw-r--r-- 1 peertube peertube 1248 ngày 29 tháng 3 09:35 yarn-error.log
-rw-r--r-- 1 peertube peertube 413 ngày 28 tháng 3 16:48 yarn.lock

Các ln -s lệnh đưa ra một lỗi, nhưng nếu không thì mọi thứ sẽ ổn và hoạt động như mong đợi.

Những gì tôi đã cố gắng

Tôi cũng đã thử gắn bộ lưu trữ với tùy chọn này

-o follow_symlinks
    theo liên kết tượng trưng trên máy chủ 

nhưng tất cả những gì làm là phá vỡ các tệp và tôi không thể xóa chúng nữa, khi tệp mục tiêu liên kết không còn tồn tại nữa. Vì vậy, tôi đã loại bỏ tùy chọn này một lần nữa.

Tôi đã hỏi bộ phận hỗ trợ khách hàng nếu symlink được hỗ trợ và câu trả lời là "có, nó được hỗ trợ".

Khi tôi tạo trực tiếp các liên kết tượng trưng trên máy chủ, nó hoạt động mà không gặp vấn đề gì.

Tôi đã cố gắn thư mục bên trong vùng chứa vào cùng thư mục với trên máy chủ
/etc/fstab:

<user>@<user>.your-storagebox.de:/data /var/peertube/data fuse.sshfs ssh_command=sshpass\040-f\040/peertube/sftp.pass\040ssh,uid=999,gid=999 ,allow_other,disable_hardlink,transform_symlinks,reconnect,_netdev 0 0
 đồng đẳng:
    khối lượng:
    - nội dung:/ứng dụng/khách hàng/dist
    - /var/peertube/data:/var/peertube/data
    - /peertube/data/config:/config
    mạng:
    - mặc định

nhưng điều này đã không giúp đỡ.

Câu hỏi

Đối với tôi, có vẻ như ngay khi tôi gắn sshf vào bên trong bộ chứa docker, nó không thể tạo bất kỳ liên kết tượng trưng nào mà không có thông báo lỗi này.

Tôi cần làm gì để nó hoạt động bên trong docker?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.