7
respostas

Rodando código em um container

Olá, estou usando o Docker VirtualBox no Windows e ao tentar referenciar o volume para a pasta "/c/users/jacks/desktop/volume-exemplo" , está informando que ainda não existe o "package.json".

jacks@DESKTOP-QA66BMT MINGW64 /c/users/jacks/Documents/volume-exemplo
$ dir
index.html  index.js  main.css  node_modules  package.json

jacks@DESKTOP-QA66BMT MINGW64 /c/users/jacks/Documents/volume-exemplo
$ docker run -p 8080:3000 -v $(pwd):/var/www -w "/var/www" node npm start
npm info it worked if it ends with ok
npm info using npm@5.3.0
npm info using node@v8.5.0
npm ERR! path /var/www/package.json
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall open
npm ERR! enoent ENOENT: no such file or directory, open '/var/www/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2017-09-21T13_57_39_414Z-debug.log

Até onde eu pesquisei, deveria funcionar pois o VM do oracle está compartilhando a pasta c:\Users

Obrigado.

7 respostas

Olá Jackson, tudo bem?

Se entendi corretamente, você estaria fazendo o teste no VirtualBox, seria isso mesmo? Uma sugestão, tente fazer o teste no seu sistema operacional nativo.

No Windows 10 estou usando o Docker Quickstart Terminal, fiz um teste da criação do container com o node e não apresentou esse problema do package.json.

Abs

Oi Rafael , tudo bem sim :)

Na verdade já estava/estou tentando no Windows 10 e usando Docker Quickstart Terminal também.

Veja abaixo o ultimo teste que fiz:

jacks@DESKTOP-QA66BMT MINGW64 /c/users/jacks/Desktop/volume-exemplo
$ docker run -p 8080:3000 -v "/c/users/jacks/Desktop/volume-exemplo:/var/www" node npm start
npm info it worked if it ends with ok
npm info using npm@5.3.0
npm info using node@v8.5.0
npm ERR! path /package.json
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall open
npm ERR! enoent ENOENT: no such file or directory, open '/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2017-09-23T05_04_30_107Z-debug.log

Apenas corrigindo, no comando acima eu esqueci do definir o diretório -w "/var/www"

jacks@DESKTOP-QA66BMT MINGW64 ~
$ docker run -p 8080:3000 -v "/c/users/jacks/Desktop/volume-exemplo:/var/www" -w "/var/www" node npm start
npm info it worked if it ends with ok
npm info using npm@5.3.0
npm info using node@v8.5.0
npm ERR! path /var/www/package.json
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall open
npm ERR! enoent ENOENT: no such file or directory, open '/var/www/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2017-09-23T06_29_45_206Z-debug.log

Olá Jackson, tudo bem?

Estranho mesmo, você conseguiria fazer o seguinte teste? Dentro do diretório volume -exemplo tente colocar o comando npm init, vai aparecer uma série de linhas para você configurar o arquivo package.json. Apenas clique Enter até chegar o final, dentro desse diretório deveremos ter o arquivo package.json parecido com o abaixo:

{
  "name": "volume-exemplo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Logo abaixo da chave scripts tente colocar a chave start: node index.js :

{
  "name": "volume-exemplo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Por fim, dentro desse mesmo diretório volume-exemplo tente criar um arquivo chamado index.js e coloque dentro console.log("Está funcionando")

Tente executar agora o comando do Docker

Abs

Olá, segui os testes, mas não funcionou:

Veja a execução dos testes:

1° ) Executei o comando "npm init" no "Docker Quickstart Terminal" dentro da pasta volume-exemplo, e pressionei enter até o final, conforme abaixo:

jacks@DESKTOP-QA66BMT MINGW64 /c/users/jacks/Desktop/volume-exemplo
$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (volume-exemplo)
version: (1.0.0)
description:
git repository:
keywords:
author:
license: (ISC)
About to write to C:\users\jacks\Desktop\volume-exemplo\package.json:

{
  "name": "volume-exemplo",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node ."
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.15.3"
  },
  "description": ""
}


Is this ok? (yes)

2° ) Depois alterei o arquivo package.json alterando a chave "start"

"start: node index.js"

Segue arquivo:

{
  "name": "volume-exemplo",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "echo \"Error: no test specified\" && exit 1"    
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.15.3"
  },
  "description": ""
}

3°) Depois criei um novo arquivo index.js , apenas com o código

console.log("Está funcionando")

E executar o comando novamente no terminal, veja o o que aconteceu:

jacks@DESKTOP-QA66BMT MINGW64 /c/users/jacks/Desktop/volume-exemplo
$ docker run -p 8080:3000 -v "/c/users/jacks/Desktop/volume-exemplo:/var/www" -w "/var/www" node npm start
npm info it worked if it ends with ok
npm info using npm@5.3.0
npm info using node@v8.5.0
npm ERR! path /var/www/package.json
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall open
npm ERR! enoent ENOENT: no such file or directory, open '/var/www/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2017-09-25T22_28_21_486Z-debug.log

PSC: Eu tive um problema com um outro exercício também desse curso, vou explicar aqui. Veja se isso pode te ajudar a me ajudar :)

Utilizando o Docker Quickstart Terminal no "Windows 10 Home Single Language"

De acordo com a atividade https://cursos.alura.com.br/course/docker-e-docker-compose/task/29292 quando instanciamos um container da imagem do ubuntu e criamos um novo arquivo através do terminal integrado "root@464a5d3f34c5:/#" O arquivo é criado na "área de trabalho" também, pois é onde é referenciado. Código do exercício original:

docker run -it -v "C:\Users\Alura\Desktop:/var/www" ubuntu

Pois bem, no meu caso o arquivo com nome arquivo-teste-jackson.txt deveria ter sido criado na minha área de trabalho também, mas isso não aconteceu. Segue o comando do exercício:

jacks@DESKTOP-QA66BMT MINGW64 /c/users/jacks/Desktop/volume-exemplo
$ docker run -it -v "/c/users/jacks/Desktop/:/var/www" ubuntu
root@464a5d3f34c5:/# cd var/www
root@464a5d3f34c5:/var/www# touch arquivo-teste-jackson.txt
root@464a5d3f34c5:/var/www# echo "Esse arquivo foi criado para teste" > arquivo-teste-jackson.txt
root@464a5d3f34c5:/var/www# ls *ar*
arquivo-teste-jackson.txt
root@464a5d3f34c5:/var/www# cat arquivo-teste-jackson.txt
Esse arquivo foi criado para teste
root@464a5d3f34c5:/var/www#

Caso isso não tenha nada haver com o problema inicial desse tópico desconsidere, por favor.

Obrigado pela atenção.

Olá Jackson,

Nossa, tá muito estranho mesmo, principalmente essa última questão dele não ter copiado o arquivo para a área de trabalho, me parece que está tudo certo, até copiei o código só mudando o diretório pra minha área de trabalho e aqui deu certo.

Vou verificar com o pessoal que trabalha mais com o Docker se eles tem alguma sugestão, me desculpe não conseguir ajudar por hora. Uma última coisa que me veio a mente, o seu Windows é 32 bits? Se for 32 bits, isso pode ser um problema, o Docker não costuma funcionar de forma adequada em plataformas com 32 bits, somente 64bits. Você consegue fazer essa verificação?

Abs

Oi Rafael, é 64 bits sim. Imagina, estou seguindo em frente com os exercícios de qualquer maneira :)

Fico no aguardo de um possível solução.

Obrigado pela atenção.

Fala Jackson, tudo bom?

Talvez seja meio tardio responder a esse post... Mas eu tive o mesmo problema que vc com o docker toolbox e consegui rodar um container node montando em um diretório compartilhado.

O próprio virtual box já faz o mount do diretório compartilhado quando vc inicia a docker-machine. Tentei de várias formas fazer o mount (até mesmo acessando a docker -machine via ssh) sem sucesso.

O único modo que eu consegui foi efetuando o mount para um diretório indicando o path do host com base no qual está informado no virtual box:

Marcel@pc-marcel MINGW64 /c/marcel/desenvolvimento/docker/volumes/volume-exemplo $ docker run -v /c/Users/Marcel/volume-exemplo:/var -w /var node npm start

volume-exemplo@1.0.0 start /var node index.js

Server is listening on port 3000

[Editado] Até para seguir o mesmo exemplo do exercício... Eu acessei a docker-machine e criei o diretório www no /var e alterei as permissões para o owner e o grupo.

O problema realmente está no diretório compartilhado pelo Virtual Box... Eu só consegui fazê-lo funcionar apenas utilizando conteúdos ou subdiretórios que estejam já no diretório compartilhado padrão dele (diretório do próprio profile - C:\Users...).

Esse mesmo procedimento eu utilizei quando criei o dockerfile e executei a imagem gerada. Somente funcionou com base no diretório compartilhado do user profile do Windows.

Espero ter ajudado!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software