#58 tienes la capa gratuita de amazon durante 12 meses
Estoy empezando a pillar rollos con Docker.
Resulta que estoy intentando crear un contenedor a partir de una imagen de nosejs en la que quiero instalar gulp para montar un watcher de less para que me lo compile cuando detecte cambios.
El Dockerfile lo tengo tal que así:
FROM node:boron
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json /usr/src/app
RUN npm install
# Bundle app source
COPY . /usr/src/app
ADD . /usr/src/app
CMD [ "npm run watch" ]
Para esto me he basado en la guía que hay en la documentación de nodejs así que no sé si me sobra algo.
Dónde hago el ADD lo tenía con
VOLUME .;/usr/src/app
Con VOLUME ni ADD consigo que funcione porque me da el siguiente error:
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"npm run watch\": executable file not found in $PATH".
Los archivos están en la ubicación correcta ya que he probado a ejecutar RUN ls -la y me devuelve el mismo contenido que tengo en el local
Ya lo he solucionado, el problema lo tenía en el CMD, le tenía que pasar cada parámetro en un string distinto.
#62 llego tarde pero, para próximas veces, puedes hacer la ejecución del tipo
docker run -it imagen bash
así entras a la bash del contenedor, por lo cual no se ejecuta la línea CMD , y allí podrías tirar los comandos
#63 Probé con eso pero me parece que acababa entrando en la terminal de node porque usaba ls, pwd y me saltaba un error diciendo que no reconocía el comando.
De lo ofuscado que estaba ni me paré a leer detenidamente el error para ver a qué se debía...
Estoy empezando a meter postgreSQL en docker-compose y para poder hacer consultas a la base de datos quiero usar PgAdmin. No sé muy bien si hay alguna forma de poder configurarlo sin tener que hacer un docker inspect sobre el contenedor de la base de datos para ver su ip. He probado usando el nombre del contenedor, localhost, 0.0.0.0, 127.0.0.0, etc... pero no me sirve ninguna...
Creo recordar que para mongodb no tuve tantos problemas para conectarlo al robomongo
#65 abre el puerto en el docker-compose ( https://docs.docker.com/compose/compose-file/#ports ) y accede con localhost:<port>
en respuesta a #67
Desconozco la aplicación de PgAdmin, pero si no quieres exponer el puerto de postgresql para fuera, lo que puedes hacer es linkear (o crearte una docker-network)
Lo harías así:
- docker network create postgrenetwork
- docker run -d --net postgrenetwork --name postgres postgres (este comando es el que usaste en origen para crear la base de datos, así que ponle las variables de entorno que necesites o configuraciones)
- docker run -d -p 5050:5050 --net pg thajeztah/pgadmin4
Así consigues que pgadmin vea la base de datos por el nombre del contenedor (postgres)
Y si lo necesitas hacer sobre docker-compose, allí también puedes definir que network utiliza haciendo algo parecido a:
db:
image: postgres
networks:
- postgrenetwork
Si trabajas con pocos contenedores relacionados, quizás es más fácil usar 'links' en lugar de networks, pero es algo que docker esta deprecando por lo que te aconsejo usar networks
lo desconozco. Hasta donde se trabajará sobre la network default de docker, pero con ella sin realizar links no llegarías de un contenedor a otro por nombre de servicio
Después de tanto tiempo, he metido en mi proyecto un paquete para crear migraciones y así tener un control de los cambios que voy haciendo en la base de datos. El problema que tengo es que cuando lanzo el comando para ejecutar el archivo acabo teniendo este error:
[ERROR] Error: connect ECONNREFUSED 127.0.0.1:5432
at Object.exports._errnoException (util.js:1026:11)
at exports._exceptionWithHostPort (util.js:1049:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1136:14)
Mi docker-compose.yml está así:
version: "2"
services:
server:
build: .
ports:
- "5000:5000"
volumes:
- ./:/usr/src/app
links:
- "db:database"
user: "1000"
db:
image: postgres:9.6.2
ports:
- "5432:5432"
volumes:
- db_data:/var/lib/postgres
restart: always
environment:
POSTGRES_PASSWORD: devel
POSTGRES_USER: devel
POSTGRES_DB: devel
volumes:
db_data:
He probado a crear una network y asignarla a los dos servicios pero nada de nada. Sigo teniendo el mismo error...
#73 Quitado.
Sigo teniendo el mismo problema, para asegurarme me he cargado los contenedores y las imágenes y lo he lanzado todo de nuevo pero sigue dándome el error.
#74 el problema esta en que tu puerto esta siendo usado:
connect ECONNREFUSED 127.0.0.1:5432
y creo que por tu postrgress local...
una opcion si no quieres matar al postgress es que lo dejes asi
db:
image: postgres:9.6.2
ports:
- "5433:5432"
#75 Me parece raro porque no tengo postgresql instalado de forma local...Pero por descartar que fuera por algún conflicto con ese puerto se lo he cambiado.
El error sigue apareciendo y sigue dando ese mismo puerto...
EDIT: He buscado por ese error en concreto y he encontrado esto: https://stackoverflow.com/questions/33357567/econnrefused-for-postgres-on-nodejs-with-dockers
He probado a crear esa variable de entorno y asignarle mis valores. Ahora no recibo el error pero se me queda ahí haciendo algo pero no sé el qué porque no lo veo, creo que ahora podré investigar un poco más.
Gracias por la ayuda.
EDIT2: La razón por la que se quedaba esperando ha sido un fallo mío. A la hora de crear la tabla estaba usando la versión callback en vez de la promise. Ahora ya está todo funcionando
Hola buenas, estoy con un proyecto de docker y me está llevando por el camino de la locura, sobretodo por el tema del dockerfile y las configuraciones. La cuestión es, que el proyecto va de crear 4 contenedores (o más si fuere necesario) con un servicio dentro en cada uno de ellos.
Los servicios a meter son:
FTP, WebServer, BBDD, Backups y de opcionales tengo Firewall, DHCP, DNS, LDAP y servidor de dominios.
Los opcionales ya casi que lo dejo y me centro en los 4 principales. Aparte en cada contenedor tiene que haber SSH, pero esto no tiene problema.
Alguien que se le de bién esto me podría echar una mano y mostrarme algun dockerfile? O joder, si teneis un proyecto parecido mostrarmelo.
Gracias!
#77 ¿Tienes que crear tu tus propios contenedores? Es decir, dockerizar un FTP, WebServer, BBDD y software de backups?
Porque webserver tienes nginx y bbdd un mongo o una mariadb los tienes oficiales. Por ejemplo.
Sobre Dockerfiles: https://docs.docker.com/engine/reference/builder/#predefined-args
Ejemplo: https://github.com/nginxinc/docker-nginx/blob/c8bfb9b5260d4ad308deac5343b73b027f684375/mainline/stretch/Dockerfile
#78 Si, tenemos que crear 4 contenedores. Del FTP va a ser VSFTPD ya que pesa poquito, de webserver apache2 ya que lo tengo por mano crearlo, bbdd había pensado en mysql o mariadb y de software de backups ni puta idea porque no he instalado ninguno aun con docker.
El problema está en crear el dockerfile y que funcione, ya que crear a pelo el contenedor no da problemas y cuando lo hago con el dockerfiles da problemas de por todo, principalment el ftp que es con lo que estoy ahora. Estamos un par de compañeros con esto que nos damos de cabeza.
#79 Por partes: un Dockerfile crea una imagen. De la imagen puedes crear contenedores.
¿Qué es lo que has probado? Tanto lo que te ha funcionado como lo que no. Escribe los comandos o dockerfiles.
Okey, por partes como dijo jack el destripador, el proyecto son 4 imagenes creadas con 4 dockerfiles i en cada imagen un servicio.
Por otra parte Como haces para iniciar un servicio cada vez que haces un docker start de una imagen que has creado a partir de un Dockerfile?
#81 Para eso tienes la sentencia ENTRYPOINT. En el entrypoint señalas un script o el binario que quieres que se ejecute cuando hagas docker start. La diferencia con CMD es que ésta está pensada para ser sobreescrita facilmente, por ejemplo, para añadir argumentos en arranque al contenedor.
Cuando invoques al binario que da servicio dentro del contenedor (ejemplo: /usr/bin/nginx), asegúrate de que se ejecuta en primer plano y no como daemon (en nginx se ejecuta siempre con los argumentos "-g daemon off;"), y a ser posible que los logs vayan al STDOUT para que sean accesible mediante el comando docker logs <container>
#82 Oh yeah! el ENTRYPOINT era lo que fallaba, ha funcionado en el dockerfile del VSFTPD. A ver con todo lo demás.
Gracias por todo, si tengo alguna duda ya te digo
#84 Tengo cierto problema a la hora de crear una imagen, he decidido crear un dockerfile el cual lanza un tomcat, que hace un clone de un repositorio de github. A la hora de crearse me da errores. Paso el codigo, a ver si alguien tiene corage:
FROM openjdk:8-jre-alpine
ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME
RUN rm -fr /app && git clone https://github.com/username/customapp.git /app
EXPOSE 80 3306
CMD ["/run.sh"]
#86 Al final lo dejé estar este codigo, era demasiado complicado, el profesor me decia que pillará codigos ya hechos y los modificase a mi gusto, pero me era más complicado que hacerlo yo desde cero.
Lo que intento hacer es un dockerfile con un servidor web que me lance una web (un hola mundo), pero no se me lanza con el servidor web ya encencido.
soy un fuckin nub de docker y tengo una duda, a ver si alguien puede ayudarme:
Tengo un Dockerfile el cual hace una serie de cosas y al final hace un "copy" de un fichero de configuración. Quiero subir este Dockerfile al hub de docker para poder utilizarlo en otras máquinas, lo hago utilizando "automate build" desde mi repo de github donde tengo el dockerfile.
Hasta aquí todo bien, PERO mi idea es no subir el fichero de configuracion al repo de github, porque hay datos sensibles. Pero si no lo subo, al hacer el "automate build", me lanzara un error, ¿no? ¿Cómo arreglo esto o cuales son las buenas prácticas hacer lo que quiero?
#88 Yo no subo nada a Docker Hub. Tengo mi propio repositorio donde subo esas cosas y las clono cuando las necesito.
#89 te refieres a que clonas el Dockerfile? pero entonces tienes que hacer build de la imagen cada vez, no?