【问题标题】:How do I write a file with Ruby within a Docker container?如何在 Docker 容器中使用 Ruby 编写文件?
【发布时间】:2019-08-08 04:15:45
【问题描述】:

我正在尝试使用 Ruby dockerized 编写一个新文件。我可以在写入文件后读取文件,但只是在容器内。我试图创建一个卷并将文件保存在其中,但我做错了,因为数据文件夹总是空的。

这是我的 Dockerfile:

RUN mkdir /data
VOLUME data data
COPY hello.rb .
ENTRYPOINT ["ruby", "hello.rb"]

这里是 hello.rb

File.open("./data/out.txt", "a+") do |line|
  puts "hola"
  line.puts "\r" + "write your stuff here"
end
File.open("./data/out.txt").each do |line|
  puts "aloha"
  puts line
end

File.write("./data/log.txt", "data...", mode: "a")
File.open("./data/log.txt").each do |line|
  puts "aloha"
  puts line
end

运行后:

$ docker build -t file-writer .
$ docker run -it file-writer

控制台的输出是:

hola

aloha

write your stuff here

aloha

data...

但是“本地”数据文件夹仍然是空的。

【问题讨论】:

  • 我删除了ruby 标签,因为您的问题真的与此无关。问题都是关于docker,所以我把它标记为这样。

标签: docker dockerfile docker-volume


【解决方案1】:

你需要在运行阶段设置你的mount

从您的 Dockerfile 中删除 VOLUME data data 并运行容器:

docker run -it -v /full/path/to/data:/data file-writer

【讨论】:

  • 谢谢,这听起来很有希望,但我收到了这个错误:docker: Error response from daemon: create ./data: "./data" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path.
  • @Ibrah,您需要提供要使用--volume 映射的目录的完整绝对路径。像./data 这样的相对路径将不起作用。要在 Unix 系统上快速使相对路径成为绝对路径,您可以使用 pwd: --volume $(pwd)/data:/data
猜你喜欢
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
相关资源
最近更新 更多